-
Notifications
You must be signed in to change notification settings - Fork 28k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[PPR] Enable incremental adoption #63847
[PPR] Enable incremental adoption #63847
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
6f2e688
to
b4de9cc
Compare
Tests Passed |
Stats from current PRDefault Build (Increase detected
|
vercel/next.js canary | vercel/next.js wyattjohnson/next-2920-enable-incremental-ppr-adoption | Change | |
---|---|---|---|
buildDuration | 15.3s | 13.8s | N/A |
buildDurationCached | 7.7s | 7.3s | N/A |
nodeModulesSize | 360 MB | 360 MB | |
nextStartRea..uration (ms) | 414ms | 412ms | N/A |
Client Bundles (main, webpack)
vercel/next.js canary | vercel/next.js wyattjohnson/next-2920-enable-incremental-ppr-adoption | Change | |
---|---|---|---|
1103-HASH.js gzip | 31.9 kB | 31.9 kB | N/A |
1a9f679d-HASH.js gzip | 53.5 kB | 53.5 kB | N/A |
335-HASH.js gzip | 5.05 kB | 5.05 kB | ✓ |
7953.HASH.js gzip | 169 B | 169 B | ✓ |
framework-HASH.js gzip | 45.2 kB | 45.2 kB | ✓ |
main-app-HASH.js gzip | 231 B | 229 B | N/A |
main-HASH.js gzip | 31.6 kB | 31.6 kB | N/A |
webpack-HASH.js gzip | 1.65 kB | 1.65 kB | N/A |
Overall change | 50.4 kB | 50.4 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | vercel/next.js wyattjohnson/next-2920-enable-incremental-ppr-adoption | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 31 kB | 31 kB | ✓ |
Overall change | 31 kB | 31 kB | ✓ |
Client Pages
vercel/next.js canary | vercel/next.js wyattjohnson/next-2920-enable-incremental-ppr-adoption | Change | |
---|---|---|---|
_app-HASH.js gzip | 192 B | 193 B | N/A |
_error-HASH.js gzip | 192 B | 193 B | N/A |
amp-HASH.js gzip | 507 B | 511 B | N/A |
css-HASH.js gzip | 341 B | 343 B | N/A |
dynamic-HASH.js gzip | 2.52 kB | 2.52 kB | ✓ |
edge-ssr-HASH.js gzip | 266 B | 265 B | N/A |
head-HASH.js gzip | 362 B | 365 B | N/A |
hooks-HASH.js gzip | 392 B | 392 B | ✓ |
image-HASH.js gzip | 4.27 kB | 4.27 kB | ✓ |
index-HASH.js gzip | 268 B | 268 B | ✓ |
link-HASH.js gzip | 2.69 kB | 2.7 kB | N/A |
routerDirect..HASH.js gzip | 329 B | 328 B | N/A |
script-HASH.js gzip | 397 B | 397 B | ✓ |
withRouter-HASH.js gzip | 324 B | 324 B | ✓ |
1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
Overall change | 8.27 kB | 8.27 kB | ✓ |
Client Build Manifests
vercel/next.js canary | vercel/next.js wyattjohnson/next-2920-enable-incremental-ppr-adoption | Change | |
---|---|---|---|
_buildManifest.js gzip | 483 B | 484 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | vercel/next.js wyattjohnson/next-2920-enable-incremental-ppr-adoption | Change | |
---|---|---|---|
index.html gzip | 528 B | 526 B | N/A |
link.html gzip | 541 B | 540 B | N/A |
withRouter.html gzip | 524 B | 522 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary | vercel/next.js wyattjohnson/next-2920-enable-incremental-ppr-adoption | Change | |
---|---|---|---|
edge-ssr.js gzip | 94.7 kB | 94.9 kB | |
page.js gzip | 182 kB | 182 kB | N/A |
Overall change | 94.7 kB | 94.9 kB |
Middleware size
vercel/next.js canary | vercel/next.js wyattjohnson/next-2920-enable-incremental-ppr-adoption | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 622 B | 624 B | N/A |
middleware-r..fest.js gzip | 156 B | 156 B | ✓ |
middleware.js gzip | 25.7 kB | 25.7 kB | N/A |
edge-runtime..pack.js gzip | 839 B | 839 B | ✓ |
Overall change | 995 B | 995 B | ✓ |
Next Runtimes Overall increase ⚠️
vercel/next.js canary | vercel/next.js wyattjohnson/next-2920-enable-incremental-ppr-adoption | Change | |
---|---|---|---|
app-page-exp...dev.js gzip | 171 kB | 171 kB | N/A |
app-page-exp..prod.js gzip | 98.8 kB | 98.8 kB | N/A |
app-page-tur..prod.js gzip | 100 kB | 100 kB | N/A |
app-page-tur..prod.js gzip | 94.6 kB | 94.6 kB | N/A |
app-page.run...dev.js gzip | 157 kB | 157 kB | N/A |
app-page.run..prod.js gzip | 93.3 kB | 93.3 kB | N/A |
app-route-ex...dev.js gzip | 21.5 kB | 21.5 kB | N/A |
app-route-ex..prod.js gzip | 15.3 kB | 15.3 kB | N/A |
app-route-tu..prod.js gzip | 15.3 kB | 15.3 kB | N/A |
app-route-tu..prod.js gzip | 15 kB | 15 kB | N/A |
app-route.ru...dev.js gzip | 21.3 kB | 21.4 kB | N/A |
app-route.ru..prod.js gzip | 15 kB | 15 kB | N/A |
pages-api-tu..prod.js gzip | 9.55 kB | 9.55 kB | ✓ |
pages-api.ru...dev.js gzip | 9.82 kB | 9.82 kB | ✓ |
pages-api.ru..prod.js gzip | 9.55 kB | 9.55 kB | ✓ |
pages-turbo...prod.js gzip | 21.5 kB | 21.5 kB | ✓ |
pages.runtim...dev.js gzip | 22.1 kB | 22.1 kB | ✓ |
pages.runtim..prod.js gzip | 21.5 kB | 21.5 kB | ✓ |
server.runti..prod.js gzip | 51.7 kB | 51.8 kB | |
Overall change | 146 kB | 146 kB |
build cache Overall increase ⚠️
vercel/next.js canary | vercel/next.js wyattjohnson/next-2920-enable-incremental-ppr-adoption | Change | |
---|---|---|---|
0.pack gzip | 1.62 MB | 1.62 MB | |
index.pack gzip | 113 kB | 113 kB | N/A |
Overall change | 1.62 MB | 1.62 MB |
Diff details
Diff for edge-ssr.js
Diff too large to display
Diff for app-page-exp..ntime.dev.js
Diff too large to display
Diff for app-page-exp..time.prod.js
Diff too large to display
Diff for app-page-tur..time.prod.js
Diff too large to display
Diff for app-page-tur..time.prod.js
Diff too large to display
Diff for app-page.runtime.dev.js
Diff too large to display
Diff for app-page.runtime.prod.js
Diff too large to display
Diff for app-route-ex..ntime.dev.js
Diff too large to display
Diff for app-route-ex..time.prod.js
Diff too large to display
Diff for app-route-tu..time.prod.js
Diff too large to display
Diff for app-route-tu..time.prod.js
Diff too large to display
Diff for app-route.runtime.dev.js
Diff too large to display
Diff for app-route.ru..time.prod.js
Diff too large to display
Diff for server.runtime.prod.js
Diff too large to display
b4de9cc
to
84d9ce3
Compare
84d9ce3
to
7676c8e
Compare
7676c8e
to
516eaff
Compare
516eaff
to
7113527
Compare
bcc1bc7
to
d90fc32
Compare
7113527
to
dba7cfb
Compare
12070da
to
518996c
Compare
518996c
to
5172bf0
Compare
e82f947
to
9a385c0
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Apologies for the unsolicited review; I came across these two minor errors in the code comments while reading through the PR out of curiosity.
fff3604
to
1e14542
Compare
19a84fa
to
1cfdecc
Compare
!isInterceptionRouteAppPath(page) && | ||
checkIsRoutePPREnabled(pprConfig, appConfig) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if the interception check should be part of checkIsRoutePPREnabled
so we don't accidentally forget it somewhere
@@ -2688,7 +2716,8 @@ export default abstract class Server< | |||
} | |||
|
|||
const didPostpone = | |||
cacheEntry.value?.kind === 'PAGE' && !!cacheEntry.value.postponed | |||
cacheEntry.value?.kind === 'PAGE' && | |||
typeof cacheEntry.value.postponed === 'string' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
not for this PR, but perhaps for the future: I think we should rename this value. seeing postponed
makes me think I'm going to be working with a boolean, not postpone state.
11d013a
to
9345844
Compare
Co-authored-by: Hendrik Liebau <mail@hendrik-liebau.de>
Co-authored-by: Hendrik Liebau <mail@hendrik-liebau.de>
10b8808
to
bebe570
Compare
Enabling Partial Prerendering (PPR) for an entire application is ideally, the goal for teams wanting to test out the feature or adopt it in their applications to get ready for when it becomes the default rendering pattern. For large applications, with many routes the new behaviours of old API's may prove a difficult pill to swallow all at once.
This aims to enable incremental adoption of PPR for pages and routes that want to support it in a similar way to how existing segment-level configurations. Segments can now add:
To enable PPR for that segment and those descending segments. Any subset of those routes that have it enabled can add:
An aside on the choice of
experimental_ppr
nameTo disable PPR for that segment and those descending segments. To use this new option, the
experimental.ppr
configuration innext.config.js
must be set to"incremental"
:If a segment does not export a
experimental_ppr
boolean, it is inferred from it's parent. If no parent has it defined, it's default value isfalse
and therefore disabled.Once all your segments have PPR enabled via this config, it would be considered safe for teams to set their
experimental.ppr
value in thenext.config.js
totrue
, enabling it for the entire app and for all future routes.Aside
I also took the liberty to rename
isPPR
andsupportsPPR
to be the clearerisAppPPREnabled
andisRoutePPREnabled
.