visible true

技術的なメモを書く

Next.js全部読む 3 (~2.0.0-beta.16)

Add AOT gzip content-encoding support for main build files.

2016/12/30 https://github.com/vercel/next.js/commit/29c226771ce8b5b26632c8e7753e69f7407933b4

AOTってなんだ?と思って引っかかった。 Ahead of Timeの略で、実行前に処理をするという意味のようでした。 差分を見ると、build時にassetsをgzipにするほか、main.js、common.jsをレンダリングのタイミングでAcceptヘッダを見てgzipにしています。

Prevent prefetcher from making identical requests.

2017/01/05 https://github.com/vercel/next.js/commit/e38cacc4c25ec91764ef00bc32936f8108a93a65

prefetchの際に、変更前まではロードが完了してからキャッシュの有無のフラグを立てていた。 Map<string, boolean>でURLをキーにプリフェッチの状態を管理していたのを、 Map<string, Promise>にすることで、二重でロードするのを防ぐようにした。

bypass SSE on Service Worker

2017/01/07 https://github.com/vercel/next.js/commit/0551dc90a14d4beda8dc64058c4ae2837cc61ec6

Service Workerでfetchする際に、リクエストがSSEを期待している場合は実行しないように。 prefetchをスクラッチしている感じがして面白い。

Implement "Immutable build artifacts" feature

2017/01/12 https://github.com/vercel/next.js/commit/b7e57f934740bd1cfb6c0a9c797b8943eb12ca49

Cache-Control: immutableという新しいCache-Controlの仕様をサポート。 immutableは2017年9月に正式にRFCになったらしい。

tex2e.github.io

ビルド時にUUIDを発行し、prefetchやrouterで画面遷移の際に取得するjsonデータなどのパスで利用します。 これによってすでにキャッシュ済みのコンテンツに対してはリクエストを行わないようになります。 もともとFacebookがリロードでの304の大量発生を防ぐために考案したものだそうです。

bitsup.blogspot.com

なるほどこんな仕様があるのだな〜と面白かった。

まとめ

2.0.0-betaは42まであってすごく長い