Next.js のページ遷移を全力で止める
「保存されません」ダイアログ
- 変更の保存漏れを防ぐUI
- 勝手に保存するパターン
- ダイアログで確認するパターン
- 戻る/進むでもちゃんと出す
- Nextでやるのは大変
- Navigation Guardというライブラリを作った
ページを止めるハック
- ページ遷移
- リロードやリンクによる遷移
- beforeunload
- SPAのアプリ内リンク(HistoryAPIによる書き換え)
- router.pushで止めたい
- Context経由でrouterを書き換える
- 戻る/進む
- HistoryAPIでURL書き換わってからpopstateが飛んでくる
- popstateでhistory.goで戻るを戻して
- stopImmediatePropagationで止める
- URLが書き換わるのを戻すためにpushStateを上書き
- リロードやリンクによる遷移
Turbopack Today
- Hiroppyさん
- https://docs.google.com/presentation/d/1PSV8xq1GEYjLaQdT_vjlOUNlsYKsYDpPQ8SSBXahd0E/edit#slide=id.p
Turbopack
- Rustで書かれたバンドラー
- weboackの後継
- webpack pluginの互換はない
- swc/LightningCSS
- webpackのパフォーマンスの課題を改善する中で新しく作られたもの
- メモリで持ってたものをファイルに書き出して2回目から高速に
- Turbo Engine
- Function単位のキャッシュ
- I/Oが同じならキャッシュを使う
- チャンクをリモートにあげてリモートキャッシュ
- Function単位のキャッシュ
- incremental buildと最適化は対立する
- devはサイズより速さ
- prodは速さよりサイズの最適化
- 最適化するには全体が見ないといけない
- incremental buikdとは逆
- 最適化
- Tree Shaking
- 使われているexportだけ残す
- 全体を見ないと判断できない
- Export Manging
- exportsをa,bなどに置換する
- 呼び出し先とかにも影響がある
- Tree Shaking
- scriptタグをたくさん作りすぎない仕組み
- 規模が大きくなるほど速い
- next.configでwebpackの設定たくさん書いてると移行大変
vercel/aivercel AI SDK のストリームと戯れる
- suguruさん
AI SDK
npm i ai
でインストールできるLLMパッケージ- vercel製だけどFW依存なし
- generateTextとかgenerateObjectとか
- createStreamableValue
- サーバからstreamで流せる
- ServerActionに対応してる
- createStreamableUI
- Reactのコンポーネントをサーバから流せる
PATCH didn't work
- Quramyさん
fetchの上書き問題
- Nextで困ってること
- NextのCache
- Datadog APM連携
- msw連携
- それぞれfetchにパッチを当てている
- next/datadog sdk/msw
- これらが衝突する
- NextのRequest Memoization
- 同じリクエストはキャッシュを使って最適化してくれる
- NextのDataCache
- リクエスト間で共有されるキャッシュ
- fetchにnextっていうオプションがでてキャッシュ時間とかタグ付けできる
- APMと分散トレース
- HTTPリクエストの経路を辿れる
- traceidを仕込むことで紐づけられるようにする
- http headerに仕込む
- これが動かない
- fetchを上書きして対応してる
- 14.1.0でなおった
- msw
- http通信をモックするライブラリ
- ブラウザではServiceWorker使ってるがnodeではfetchにパッチをあてている
- サーバーコンポーネントで動かない
- next devで最初は動くがリロードしたりすると動かなくなる
- 修正はされたがリリースされてない