-
Notifications
You must be signed in to change notification settings - Fork 26.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PPR] Enable incremental adoption (#63847)
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: ```ts export const experimental_ppr = true ``` To enable PPR for that segment and those descending segments. Any subset of those routes that have it enabled can add: ```ts export const experimental_ppr = false ``` <details> <summary>An aside on the choice of <code>experimental_ppr</code> name</summary> <blockquote> <p>It is against common JS semantics to use snake-case, and preference is given to camel-case instead. The choice to make this snake-case was to re-enforce that this is an experimental feature, an ugly incremental path, and ideally, developers should aim to remove all references of it from their codebase.</p> <p>Additionally, this mirrors what we've done for unstable API's like `unstable_cache`.</p> </blockquote> </details> To disable PPR for that segment and those descending segments. To use this new option, the `experimental.ppr` configuration in `next.config.js` must be set to `"incremental"`: ```js // next.config.js module.exports = { experimental: { ppr: "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 is `false` 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 the `next.config.js` to `true`, enabling it for the entire app and for all future routes. ### Aside I also took the liberty to rename `isPPR` and `supportsPPR` to be the clearer `isAppPPREnabled` and `isRoutePPREnabled`. --------- Co-authored-by: Hendrik Liebau <mail@hendrik-liebau.de>
- Loading branch information
1 parent
53c0843
commit cdb4154
Showing
52 changed files
with
823 additions
and
345 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.