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になったらしい。
ビルド時にUUIDを発行し、prefetchやrouterで画面遷移の際に取得するjsonデータなどのパスで利用します。 これによってすでにキャッシュ済みのコンテンツに対してはリクエストを行わないようになります。 もともとFacebookがリロードでの304の大量発生を防ぐために考案したものだそうです。
なるほどこんな仕様があるのだな〜と面白かった。
まとめ
2.0.0-betaは42まであってすごく長い