Replace build id in Pages data routes with deployment id#88959
Replace build id in Pages data routes with deployment id#88959
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
Tests Passed |
Stats from current PR🔴 1 regression
📊 All Metrics📖 Metrics GlossaryDev Server Metrics:
Build Metrics:
Change Thresholds:
⚡ Dev Server
📦 Dev Server (Webpack) (Legacy)📦 Dev Server (Webpack)
⚡ Production Builds
📦 Production Builds (Webpack) (Legacy)📦 Production Builds (Webpack)
📦 Bundle SizesBundle Sizes⚡ TurbopackClient Main Bundles: **434 kB** → **434 kB**
|
| Canary | PR | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 764 B | 765 B | ✓ |
| Total | 764 B | 765 B |
Build Details
Build Manifests
| Canary | PR | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 450 B | 451 B | ✓ |
| Total | 450 B | 451 B |
📦 Webpack
Client
Main Bundles
| Canary | PR | Change | |
|---|---|---|---|
| 5528-HASH.js gzip | 5.47 kB | N/A | - |
| 6280-HASH.js gzip | 54.4 kB | N/A | - |
| 6335.HASH.js gzip | 169 B | N/A | - |
| 912-HASH.js gzip | 4.53 kB | N/A | - |
| e8aec2e4-HASH.js gzip | 62.5 kB | N/A | - |
| framework-HASH.js gzip | 59.7 kB | 59.7 kB | ✓ |
| main-app-HASH.js gzip | 255 B | 254 B | ✓ |
| main-HASH.js gzip | 39 kB | 39.1 kB | ✓ |
| webpack-HASH.js gzip | 1.68 kB | 1.68 kB | ✓ |
| 262-HASH.js gzip | N/A | 4.52 kB | - |
| 2889.HASH.js gzip | N/A | 169 B | - |
| 5602-HASH.js gzip | N/A | 5.48 kB | - |
| 6948ada0-HASH.js gzip | N/A | 62.5 kB | - |
| 9544-HASH.js gzip | N/A | 55.1 kB | - |
| Total | 228 kB | 229 kB |
Polyfills
| Canary | PR | Change | |
|---|---|---|---|
| polyfills-HASH.js gzip | 39.4 kB | 39.4 kB | ✓ |
| Total | 39.4 kB | 39.4 kB | ✓ |
Pages
| Canary | PR | Change | |
|---|---|---|---|
| _app-HASH.js gzip | 194 B | 194 B | ✓ |
| _error-HASH.js gzip | 183 B | 180 B | 🟢 3 B (-2%) |
| css-HASH.js gzip | 331 B | 330 B | ✓ |
| dynamic-HASH.js gzip | 1.81 kB | 1.81 kB | ✓ |
| edge-ssr-HASH.js gzip | 256 B | 256 B | ✓ |
| head-HASH.js gzip | 351 B | 352 B | ✓ |
| hooks-HASH.js gzip | 384 B | 383 B | ✓ |
| image-HASH.js gzip | 580 B | 581 B | ✓ |
| index-HASH.js gzip | 260 B | 260 B | ✓ |
| link-HASH.js gzip | 2.49 kB | 2.49 kB | ✓ |
| routerDirect..HASH.js gzip | 320 B | 319 B | ✓ |
| script-HASH.js gzip | 386 B | 386 B | ✓ |
| withRouter-HASH.js gzip | 315 B | 315 B | ✓ |
| 1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
| Total | 7.97 kB | 7.97 kB | ✅ -1 B |
Server
Edge SSR
| Canary | PR | Change | |
|---|---|---|---|
| edge-ssr.js gzip | 126 kB | 126 kB | ✓ |
| page.js gzip | 247 kB | 248 kB | ✓ |
| Total | 374 kB | 374 kB |
Middleware
| Canary | PR | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 614 B | 613 B | ✓ |
| middleware-r..fest.js gzip | 156 B | 155 B | ✓ |
| middleware.js gzip | 33.1 kB | 33.2 kB | ✓ |
| edge-runtime..pack.js gzip | 842 B | 842 B | ✓ |
| Total | 34.7 kB | 34.8 kB |
Build Details
Build Manifests
| Canary | PR | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 732 B | 736 B | ✓ |
| Total | 732 B | 736 B |
Build Cache
| Canary | PR | Change | |
|---|---|---|---|
| 0.pack gzip | 3.76 MB | 3.79 MB | 🔴 +21.7 kB (+1%) |
| index.pack gzip | 102 kB | 102 kB | ✓ |
| index.pack.old gzip | 101 kB | 102 kB | 🔴 +1.2 kB (+1%) |
| Total | 3.97 MB | 3.99 MB |
🔄 Shared (bundler-independent)
Runtimes
| Canary | PR | Change | |
|---|---|---|---|
| app-page-exp...dev.js gzip | 311 kB | 311 kB | ✓ |
| app-page-exp..prod.js gzip | 166 kB | 166 kB | ✓ |
| app-page-tur...dev.js gzip | 311 kB | 311 kB | ✓ |
| app-page-tur..prod.js gzip | 166 kB | 166 kB | ✓ |
| app-page-tur...dev.js gzip | 307 kB | 307 kB | ✓ |
| app-page-tur..prod.js gzip | 164 kB | 164 kB | ✓ |
| app-page.run...dev.js gzip | 307 kB | 307 kB | ✓ |
| app-page.run..prod.js gzip | 164 kB | 164 kB | ✓ |
| app-route-ex...dev.js gzip | 70.2 kB | 70.3 kB | ✓ |
| app-route-ex..prod.js gzip | 48.8 kB | 48.8 kB | ✓ |
| app-route-tu...dev.js gzip | 70.2 kB | 70.3 kB | ✓ |
| app-route-tu..prod.js gzip | 48.8 kB | 48.9 kB | ✓ |
| app-route-tu...dev.js gzip | 69.8 kB | 69.9 kB | ✓ |
| app-route-tu..prod.js gzip | 48.6 kB | 48.6 kB | ✓ |
| app-route.ru...dev.js gzip | 69.8 kB | 69.9 kB | ✓ |
| app-route.ru..prod.js gzip | 48.6 kB | 48.6 kB | ✓ |
| dist_client_...dev.js gzip | 324 B | 324 B | ✓ |
| dist_client_...dev.js gzip | 326 B | 326 B | ✓ |
| dist_client_...dev.js gzip | 318 B | 318 B | ✓ |
| dist_client_...dev.js gzip | 317 B | 317 B | ✓ |
| pages-api-tu...dev.js gzip | 43.1 kB | 43.2 kB | ✓ |
| pages-api-tu..prod.js gzip | 32.8 kB | 32.9 kB | ✓ |
| pages-api.ru...dev.js gzip | 43.1 kB | 43.2 kB | ✓ |
| pages-api.ru..prod.js gzip | 32.8 kB | 32.9 kB | ✓ |
| pages-turbo....dev.js gzip | 52.4 kB | 52.5 kB | ✓ |
| pages-turbo...prod.js gzip | 39.3 kB | 39.4 kB | ✓ |
| pages.runtim...dev.js gzip | 52.3 kB | 52.4 kB | ✓ |
| pages.runtim..prod.js gzip | 39.3 kB | 39.3 kB | ✓ |
| server.runti..prod.js gzip | 62.5 kB | 62.5 kB | ✓ |
| Total | 2.77 MB | 2.77 MB |
📝 Changed Files (25 files)
Files with changes:
app-page-exp..ntime.dev.jsapp-page-exp..time.prod.jsapp-page-tur..ntime.dev.jsapp-page-tur..time.prod.jsapp-page-tur..ntime.dev.jsapp-page-tur..time.prod.jsapp-page.runtime.dev.jsapp-page.runtime.prod.jsapp-route-ex..ntime.dev.jsapp-route-ex..time.prod.jsapp-route-tu..ntime.dev.jsapp-route-tu..time.prod.jsapp-route-tu..ntime.dev.jsapp-route-tu..time.prod.jsapp-route.runtime.dev.jsapp-route.ru..time.prod.jspages-api-tu..ntime.dev.jspages-api-tu..time.prod.jspages-api.runtime.dev.jspages-api.ru..time.prod.js- ... and 5 more
View diffs
app-page-exp..ntime.dev.js
failed to diffapp-page-exp..time.prod.js
Diff too large to display
app-page-tur..ntime.dev.js
failed to diffapp-page-tur..time.prod.js
Diff too large to display
app-page-tur..ntime.dev.js
failed to diffapp-page-tur..time.prod.js
Diff too large to display
app-page.runtime.dev.js
failed to diffapp-page.runtime.prod.js
Diff too large to display
app-route-ex..ntime.dev.js
Diff too large to display
app-route-ex..time.prod.js
Diff too large to display
app-route-tu..ntime.dev.js
Diff too large to display
app-route-tu..time.prod.js
Diff too large to display
app-route-tu..ntime.dev.js
Diff too large to display
app-route-tu..time.prod.js
Diff too large to display
app-route.runtime.dev.js
Diff too large to display
app-route.ru..time.prod.js
Diff too large to display
pages-api-tu..ntime.dev.js
Diff too large to display
pages-api-tu..time.prod.js
Diff too large to display
pages-api.runtime.dev.js
Diff too large to display
pages-api.ru..time.prod.js
Diff too large to display
pages-turbo...ntime.dev.js
Diff too large to display
pages-turbo...time.prod.js
Diff too large to display
pages.runtime.dev.js
Diff too large to display
pages.runtime.prod.js
Diff too large to display
server.runtime.prod.js
Diff too large to display
78c9786 to
b6b5aed
Compare
b6b5aed to
7dc0d1e
Compare
7dc0d1e to
b0a6c8e
Compare
f50ec09 to
152d38a
Compare
b0a6c8e to
e1c0a15
Compare
152d38a to
2b879e9
Compare
e1c0a15 to
7408d47
Compare
Merging this PR will not alter performance
Comparing Footnotes
|
21e3e41 to
e1e10bd
Compare
9455b94 to
646bac7
Compare
646bac7 to
ac6933c
Compare
)" This reverts commit 6766a27.
)" (#89323) `test/e2e/middleware-redirects` has 404s on the data route
Reapply #88959 Revert #89323 Closes PACK-6537 Closes PACK-6756 - Deployment skew (forcing a MPA nav instead of a SPA nav if a deployment happened inbetween) is handled by comparing a header on the client side. - The other case that used build ids was app router, which was changed to the same approach in #88855 - Then, when a deployment id is available, make the build id a constant - Particularly, this makes the rollout of this much easier as the data route paths stay the same (both in Next.js itself as well as in the builder) If you use `output:export` and set `config.deploymentId` (i.e. enable skew protection) you are still expected to set these headers.
…cel#88959)" (vercel#89323) `test/e2e/middleware-redirects` has 404s on the data route
…l#89325) Reapply vercel#88959 Revert vercel#89323 Closes PACK-6537 Closes PACK-6756 - Deployment skew (forcing a MPA nav instead of a SPA nav if a deployment happened inbetween) is handled by comparing a header on the client side. - The other case that used build ids was app router, which was changed to the same approach in vercel#88855 - Then, when a deployment id is available, make the build id a constant - Particularly, this makes the rollout of this much easier as the data route paths stay the same (both in Next.js itself as well as in the builder) If you use `output:export` and set `config.deploymentId` (i.e. enable skew protection) you are still expected to set these headers.

Closes PACK-6537
When a deployment id is available, don't put the data routes at
_next/data/<BUILDID>/page.json, but at_next/data/page.json.Deployment skew (forcing a MPA nav instead of a SPA nav if a deployment happened inbetween) is handled by comparing a header on the client side.
If you use
output:exportand setconfig.deploymentId(i.e. enable skew protection) you are still expected to set these headers.