Handle Pages data route skew with deployment id header, take 2#89325
Handle Pages data route skew with deployment id header, take 2#89325
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
Stats from current PR✅ No significant changes detected📊 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: **437 kB** → **437 kB**
|
| Canary | PR | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 770 B | 766 B | ✓ |
| Total | 770 B | 766 B | ✅ -4 B |
Build Details
Build Manifests
| Canary | PR | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 450 B | 450 B | ✓ |
| Total | 450 B | 450 B | ✓ |
📦 Webpack
Client
Main Bundles
| Canary | PR | Change | |
|---|---|---|---|
| 5528-HASH.js gzip | 5.47 kB | N/A | - |
| 6280-HASH.js gzip | 56.8 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 | 256 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 | 57.4 kB | - |
| Total | 230 kB | 231 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 | 249 kB | 249 kB | ✓ |
| Total | 375 kB | 375 kB |
Middleware
| Canary | PR | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 614 B | 617 B | ✓ |
| middleware-r..fest.js gzip | 156 B | 155 B | ✓ |
| middleware.js gzip | 33 kB | 33 kB | ✓ |
| edge-runtime..pack.js gzip | 842 B | 842 B | ✓ |
| Total | 34.6 kB | 34.6 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.81 MB | 3.83 MB | 🔴 +12.8 kB (+0%) |
| index.pack gzip | 103 kB | 103 kB | ✓ |
| index.pack.old gzip | 103 kB | 103 kB | ✓ |
| Total | 4.02 MB | 4.03 MB |
🔄 Shared (bundler-independent)
Runtimes
| Canary | PR | Change | |
|---|---|---|---|
| app-page-exp...dev.js gzip | 312 kB | 312 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 | 308 kB | 308 kB | ✓ |
| app-page-tur..prod.js gzip | 164 kB | 164 kB | ✓ |
| app-page.run...dev.js gzip | 308 kB | 308 kB | ✓ |
| app-page.run..prod.js gzip | 164 kB | 164 kB | ✓ |
| app-route-ex...dev.js gzip | 70.4 kB | 70.4 kB | ✓ |
| app-route-ex..prod.js gzip | 48.9 kB | 48.9 kB | ✓ |
| app-route-tu...dev.js gzip | 70.4 kB | 70.4 kB | ✓ |
| app-route-tu..prod.js gzip | 49 kB | 49 kB | ✓ |
| app-route-tu...dev.js gzip | 70 kB | 70 kB | ✓ |
| app-route-tu..prod.js gzip | 48.7 kB | 48.7 kB | ✓ |
| app-route.ru...dev.js gzip | 70 kB | 70 kB | ✓ |
| app-route.ru..prod.js gzip | 48.7 kB | 48.7 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.2 kB | 43.2 kB | ✓ |
| pages-api-tu..prod.js gzip | 32.9 kB | 32.9 kB | ✓ |
| pages-api.ru...dev.js gzip | 43.1 kB | 43.1 kB | ✓ |
| pages-api.ru..prod.js gzip | 32.8 kB | 32.8 kB | ✓ |
| pages-turbo....dev.js gzip | 52.4 kB | 52.4 kB | ✓ |
| pages-turbo...prod.js gzip | 39.4 kB | 39.4 kB | ✓ |
| pages.runtim...dev.js gzip | 52.4 kB | 52.4 kB | ✓ |
| pages.runtim..prod.js gzip | 39.3 kB | 39.3 kB | ✓ |
| server.runti..prod.js gzip | 62.6 kB | 62.6 kB | ✓ |
| Total | 2.78 MB | 2.78 MB | ✅ -1 B |
eaf3516 to
b5483b8
Compare
Failing test suitesCommit: f7f0c15 | About building and testing Next.js |
test/e2e/pages-ssg-data-deployment-skew/pages-ssg-data-deployment-skew.test.ts
Outdated
Show resolved
Hide resolved
Merging this PR will degrade performance by 6.29%
Performance Changes
Comparing Footnotes
|
b5483b8 to
842c8b0
Compare
b47ffc0 to
0aac540
Compare
842c8b0 to
f7f0c15
Compare
Since vercel/next.js#89325, the build id is overridden to a hardcoded string `build-TfctsWXpff2fKS` when skew protection is enabled. https://github.com/vercel/next.js/blob/2521b8adc73957cf7dfc358bea3c461b04bcfa16/packages/next/src/build/index.ts#L906-L910 Update the e2e tests to use that instead. --------- Co-authored-by: JJ Kasper <jj@jjsweb.site>
…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.

Reapply #88959
Revert #89323
Closes PACK-6537
Closes PACK-6756
If you use
output:exportand setconfig.deploymentId(i.e. enable skew protection) you are still expected to set these headers.