-
Notifications
You must be signed in to change notification settings - Fork 27.2k
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
fix: empty generateStaticParams should still create an ISR route #73358
Merged
ztanner
merged 3 commits into
canary
from
11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route
Dec 10, 2024
Merged
fix: empty generateStaticParams should still create an ISR route #73358
ztanner
merged 3 commits into
canary
from
11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route
Dec 10, 2024
+113
−13
Conversation
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
Tests Passed |
Stats from current PRDefault Build (Increase detected
|
vercel/next.js canary | vercel/next.js 11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route | Change | |
---|---|---|---|
buildDuration | 27.9s | 18.5s | N/A |
buildDurationCached | 17.6s | 15.5s | N/A |
nodeModulesSize | 409 MB | 409 MB | |
nextStartRea..uration (ms) | 466ms | 487ms | N/A |
Client Bundles (main, webpack)
vercel/next.js canary | vercel/next.js 11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route | Change | |
---|---|---|---|
1187-HASH.js gzip | 50.2 kB | 50.2 kB | N/A |
8276.HASH.js gzip | 169 B | 168 B | N/A |
8377-HASH.js gzip | 5.3 kB | 5.3 kB | N/A |
bccd1874-HASH.js gzip | 53 kB | 53 kB | N/A |
framework-HASH.js gzip | 57.5 kB | 57.5 kB | N/A |
main-app-HASH.js gzip | 232 B | 235 B | N/A |
main-HASH.js gzip | 33.8 kB | 33.7 kB | N/A |
webpack-HASH.js gzip | 1.71 kB | 1.71 kB | N/A |
Overall change | 0 B | 0 B | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | vercel/next.js 11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 39.4 kB | 39.4 kB | ✓ |
Overall change | 39.4 kB | 39.4 kB | ✓ |
Client Pages
vercel/next.js canary | vercel/next.js 11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route | Change | |
---|---|---|---|
_app-HASH.js gzip | 193 B | 193 B | ✓ |
_error-HASH.js gzip | 193 B | 193 B | ✓ |
amp-HASH.js gzip | 512 B | 510 B | N/A |
css-HASH.js gzip | 343 B | 342 B | N/A |
dynamic-HASH.js gzip | 1.84 kB | 1.84 kB | ✓ |
edge-ssr-HASH.js gzip | 265 B | 265 B | ✓ |
head-HASH.js gzip | 363 B | 362 B | N/A |
hooks-HASH.js gzip | 393 B | 392 B | N/A |
image-HASH.js gzip | 4.44 kB | 4.43 kB | N/A |
index-HASH.js gzip | 268 B | 268 B | ✓ |
link-HASH.js gzip | 2.35 kB | 2.34 kB | N/A |
routerDirect..HASH.js gzip | 328 B | 328 B | ✓ |
script-HASH.js gzip | 397 B | 397 B | ✓ |
withRouter-HASH.js gzip | 323 B | 326 B | N/A |
1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
Overall change | 3.59 kB | 3.59 kB | ✓ |
Client Build Manifests
vercel/next.js canary | vercel/next.js 11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route | Change | |
---|---|---|---|
_buildManifest.js gzip | 747 B | 745 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | vercel/next.js 11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route | Change | |
---|---|---|---|
index.html gzip | 524 B | 523 B | N/A |
link.html gzip | 538 B | 538 B | ✓ |
withRouter.html gzip | 520 B | 520 B | ✓ |
Overall change | 1.06 kB | 1.06 kB | ✓ |
Edge SSR bundle Size
vercel/next.js canary | vercel/next.js 11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route | Change | |
---|---|---|---|
edge-ssr.js gzip | 128 kB | 128 kB | N/A |
page.js gzip | 203 kB | 203 kB | N/A |
Overall change | 0 B | 0 B | ✓ |
Middleware size
vercel/next.js canary | vercel/next.js 11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 671 B | 668 B | N/A |
middleware-r..fest.js gzip | 155 B | 156 B | N/A |
middleware.js gzip | 31 kB | 31 kB | N/A |
edge-runtime..pack.js gzip | 844 B | 844 B | ✓ |
Overall change | 844 B | 844 B | ✓ |
Next Runtimes
vercel/next.js canary | vercel/next.js 11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route | Change | |
---|---|---|---|
523-experime...dev.js gzip | 322 B | 322 B | ✓ |
523.runtime.dev.js gzip | 314 B | 314 B | ✓ |
app-page-exp...dev.js gzip | 322 kB | 322 kB | ✓ |
app-page-exp..prod.js gzip | 127 kB | 127 kB | ✓ |
app-page-tur..prod.js gzip | 140 kB | 140 kB | ✓ |
app-page-tur..prod.js gzip | 135 kB | 135 kB | ✓ |
app-page.run...dev.js gzip | 312 kB | 312 kB | ✓ |
app-page.run..prod.js gzip | 122 kB | 122 kB | ✓ |
app-route-ex...dev.js gzip | 37.1 kB | 37.1 kB | ✓ |
app-route-ex..prod.js gzip | 25.1 kB | 25.1 kB | ✓ |
app-route-tu..prod.js gzip | 25.1 kB | 25.1 kB | ✓ |
app-route-tu..prod.js gzip | 24.9 kB | 24.9 kB | ✓ |
app-route.ru...dev.js gzip | 38.7 kB | 38.7 kB | ✓ |
app-route.ru..prod.js gzip | 24.9 kB | 24.9 kB | ✓ |
pages-api-tu..prod.js gzip | 9.56 kB | 9.56 kB | ✓ |
pages-api.ru...dev.js gzip | 11.4 kB | 11.4 kB | ✓ |
pages-api.ru..prod.js gzip | 9.56 kB | 9.56 kB | ✓ |
pages-turbo...prod.js gzip | 21.3 kB | 21.3 kB | ✓ |
pages.runtim...dev.js gzip | 27 kB | 27 kB | ✓ |
pages.runtim..prod.js gzip | 21.3 kB | 21.3 kB | ✓ |
server.runti..prod.js gzip | 916 kB | 916 kB | ✓ |
Overall change | 2.35 MB | 2.35 MB | ✓ |
build cache Overall increase ⚠️
vercel/next.js canary | vercel/next.js 11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route | Change | |
---|---|---|---|
0.pack gzip | 2.04 MB | 2.04 MB | |
index.pack gzip | 146 kB | 146 kB | N/A |
Overall change | 2.04 MB | 2.04 MB |
Diff details
Diff for main-HASH.js
Diff too large to display
ztanner
force-pushed
the
11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route
branch
from
November 29, 2024 16:53
2de717a
to
3bc84e2
Compare
ztanner
force-pushed
the
11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route
branch
2 times, most recently
from
December 9, 2024 22:02
cdae93f
to
8dbe5c7
Compare
ztanner
force-pushed
the
11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route
branch
from
December 10, 2024 00:37
8b3e14d
to
024b520
Compare
ztanner
force-pushed
the
11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route
branch
from
December 10, 2024 01:06
024b520
to
25aca48
Compare
ijjk
approved these changes
Dec 10, 2024
ztanner
deleted the
11-29-fix_empty_generatestaticparams_should_still_create_an_isr_route
branch
December 10, 2024 15:05
ztanner
added a commit
that referenced
this pull request
Dec 13, 2024
This refactors `collectAppPageSegments` to be more efficient especially when dealing with multiple parallel routes, where the number of combinations of segments can drastically increase how many segments are returned per route. Previously this function only considered the `children` parallel route. When it was updated to consider all possible parallel routes in #73358, this had the unintended side effect of increasing the amount of duplicate segments this function would have to process. We only need to return unique segments discovered from a particular loader tree (representing a page), as opposed to the same segment as many times as it might appear across all parallel routes. This PR uses a map to track unique segments with a composite key used to identify the discovered segments. Additionally, this refactors the function to be iterative rather than recursive. We keep track of a queue of segments to be processed (a tuple of `[loaderTree, segments]`), and as we discover new parallel route paths, we process the queue further. Fixes #73793 Closes #73871 (h/t to @icyJoseph for identifying the cause of the memory consumption)
ztanner
added a commit
that referenced
this pull request
Dec 16, 2024
This refactors `collectAppPageSegments` to be more efficient especially when dealing with multiple parallel routes, where the number of combinations of segments can drastically increase how many segments are returned per route. Previously this function only considered the `children` parallel route. When it was updated to consider all possible parallel routes in #73358, this had the unintended side effect of increasing the amount of duplicate segments this function would have to process. We only need to return unique segments discovered from a particular loader tree (representing a page), as opposed to the same segment as many times as it might appear across all parallel routes. This PR uses a map to track unique segments with a composite key used to identify the discovered segments. Additionally, this refactors the function to be iterative rather than recursive. We keep track of a queue of segments to be processed (a tuple of `[loaderTree, segments]`), and as we discover new parallel route paths, we process the queue further. Fixes #73793 Closes #73871 (h/t to @icyJoseph for identifying the cause of the memory consumption)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Returning an empty array from
generateStaticParams
should still be deployed as an ISR route to support thedynamicParams = true
case, where a route can be generated & cached on demand. At the moment the only way to achieve this behavior is withexport const dynamic = 'force-static'
. As a result, these routes are being treated as dynamic and never return a cached response.This PR resolves the bug by fixing several distinct things:
prerenderedRoutes
does not need to be an array > 0 to mark a route as being a static path. This will ensure the build output shows the correct symbol and adds the path to the list of prerenders.prerenderedRoutes
to an empty array if we determine that the leaf-most segment (the thing rendering the current page) has agenerateStaticParams
functionchildren
branch, but for something like a parallel/interception route, those segments would be inside of a different parallel route key(.)
)This appears to have regressed in #68125
Closes NEXT-3905