# SSR (Server Side Rendering)
- 狭義
- ClientとServerで共通のロジックでHTMLをレンダリング
- メリット
- SEO
- Googleの中の人
- AngularやReactでプリレンダリング (SSR) 推奨
- 動的なOGP対応
- パフォーマンス
- First View Performance
- 流れ
- Navigation Start
- First Paint
- First Contentful Paint
- First Meaningful Paint 👈ここまで
- Visual Ready
- Time To Interactive (JS loaded)
- Fully Loaded (all resources loaded)
- First Contentful PaintとFirst Meaningful Paintの間を短縮
- SSRすることで
- 課題
- CPU負荷が高い
- [[Node.js]]
- メインループをブロックしてしまうことが多い
- AngularもReactも
- Reactは次バージョンで対応?(2017時点)
- 対策
- 諸刃の剣
- HTMLをキャッシュ
- コントロールむずい
- above the fold
- スクロール不要な範囲のみレンダリング
- SEO保証されない
- サービスの特性次第ではSSR不要
- [[Nuxt.js]]
- [[Vue.js]]
- ブラックボックス感
- [[Next.js]]
- GraphQLなしで良ければGatsbyでできることすべてできる
- 要件によってSSGとSSRを使い分けられる
- SSGは9.3から
- 10.0.3ではSSG推奨
- 切り替えはビルド時に自動判断
- Reactベース
- 拡張性・自由度が高い
- Webpackを内容・隠蔽
- APIエンドポイント機能を標準搭載
- 機能
- bundle
- compile
- routing
- ファイルベース
- 画像サイズ最適化
- zero config
- etc.
- ブラックボックス感少ない
- デプロイ
- Vercel
- リバースプロキシ
- 静的リソース
- API
- API Routing
- 貧弱
- 対応
- NextJS
- サーバーサイドNode.jsに特化
- Blitz.js
- [[Next.js]] を拡張
- + prisma
- ORM
- 一強
- inspired by RoR
- Fullstack Framework
- Zero-API Data Layer
- import server code directly into React components
- RDBMSとの相性が悪い
- [[Next.js]]
- サーバーレスファンクション
- 大量にスケールアウト
- RDBMS
- コネクション数の制限
- Custom Serverを避ける
- Express.jsから [[Next.js]] を利用
- 非推奨
- SSGと相性が悪い
- Reduxお勧めしない
- シンプルにjotai
- 攻めるならRecoil
- TypeScript
- zeit/ext-typescript
- トランスパイルにBabelを利用
- TypeScriptコンパイラによる型チェックが行われない
- 自力でWebpackをカスタマイズ
- いくつか制約あり
- [[MySQL]]
- with-mysql template
- [[AWS]]
- aws-serverless-express
- AWS公式
- LambdaでNext.js on Expressを稼働
- バックエンド
- Express.js
- たぶん
- Custom Server
- 単独
- [[Next.js]] のSSRのフルポテンシャル発揮できない
- next-connector
- The smol method routing and middleware for [Next.js](https://nextjs.org/) (also works in [other frameworks](https://github.com/hoangvvo/next-connect#using-in-other-frameworks)). Powered by [trouter](https://github.com/lukeed/trouter).
- Compatible with Express.js
- Lightweight
- 5x faster than Express.js with no overhead
- Works with async handlers (with error catching)
- TypeScript support