Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Split entrypoint/route handling into separate dev and prod versions #75169

Merged
merged 1 commit into from
Jan 23, 2025

Conversation

wbinnssmith
Copy link
Member

@wbinnssmith wbinnssmith commented Jan 22, 2025

Currently, for handleEntrypoints, handlePagesErrorRoute, handleRouteType, etc, both dev and prod use cases are combined into the same functions. This leads to a lot of branching, use-case-specific arguments, etc. for minimal opportunity for shared code.

In a following PR, entrypoint writing for prod will be done through a single napi call to rust, further branching the two versions.

This splits them formally, at the cost of duplicating a handful of lines in each case. Perhaps in the future we can develop a better system for sharing code, but this makes things far clearer and easier to maintain in this moment.

Test Plan: CI

Closes PACK-3795

@ijjk ijjk added created-by: Turbopack team PRs by the Turbopack team. type: next labels Jan 22, 2025
@wbinnssmith wbinnssmith force-pushed the wbinnssmith/split-handle-endpoints branch from 4c98342 to 4f3128a Compare January 22, 2025 00:40
@wbinnssmith wbinnssmith changed the title wbinnssmith/split handle endpoints Split entrypoint/route handling into separate dev and prod versions Jan 22, 2025
@wbinnssmith wbinnssmith force-pushed the wbinnssmith/split-handle-endpoints branch from 4f3128a to 5b0fbd6 Compare January 22, 2025 01:26
@ijjk
Copy link
Member

ijjk commented Jan 22, 2025

Tests Passed

@ijjk
Copy link
Member

ijjk commented Jan 22, 2025

Stats from current PR

Default Build
General Overall increase ⚠️
vercel/next.js canary vercel/next.js wbinnssmith/split-handle-endpoints Change
buildDuration 18.2s 16.7s N/A
buildDurationCached 15.7s 13.4s N/A
nodeModulesSize 419 MB 419 MB ⚠️ +117 kB
nextStartRea..uration (ms) 427ms 430ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js wbinnssmith/split-handle-endpoints Change
5306-HASH.js gzip 54.1 kB 54 kB N/A
8276.HASH.js gzip 169 B 168 B N/A
8377-HASH.js gzip 5.46 kB 5.46 kB N/A
bccd1874-HASH.js gzip 52.9 kB 52.9 kB N/A
framework-HASH.js gzip 57.5 kB 57.5 kB N/A
main-app-HASH.js gzip 240 B 242 B N/A
main-HASH.js gzip 34.6 kB 34.6 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 wbinnssmith/split-handle-endpoints 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 wbinnssmith/split-handle-endpoints 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.59 kB 4.58 kB N/A
index-HASH.js gzip 268 B 268 B
link-HASH.js gzip 2.35 kB 2.35 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 wbinnssmith/split-handle-endpoints Change
_buildManifest.js gzip 748 B 747 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js wbinnssmith/split-handle-endpoints Change
index.html gzip 523 B 522 B N/A
link.html gzip 538 B 537 B N/A
withRouter.html gzip 520 B 520 B
Overall change 520 B 520 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js wbinnssmith/split-handle-endpoints Change
edge-ssr.js gzip 129 kB 129 kB N/A
page.js gzip 209 kB 209 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js wbinnssmith/split-handle-endpoints Change
middleware-b..fest.js gzip 670 B 666 B N/A
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 31.3 kB 31.3 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 wbinnssmith/split-handle-endpoints Change
274-experime...dev.js gzip 322 B 322 B
274.runtime.dev.js gzip 314 B 314 B
app-page-exp...dev.js gzip 376 kB 376 kB
app-page-exp..prod.js gzip 131 kB 131 kB
app-page-tur..prod.js gzip 144 kB 144 kB
app-page-tur..prod.js gzip 140 kB 140 kB
app-page.run...dev.js gzip 364 kB 364 kB
app-page.run..prod.js gzip 127 kB 127 kB
app-route-ex...dev.js gzip 37.6 kB 37.6 kB
app-route-ex..prod.js gzip 25.6 kB 25.6 kB
app-route-tu..prod.js gzip 25.6 kB 25.6 kB
app-route-tu..prod.js gzip 25.4 kB 25.4 kB
app-route.ru...dev.js gzip 39.2 kB 39.2 kB
app-route.ru..prod.js gzip 25.4 kB 25.4 kB
pages-api-tu..prod.js gzip 9.69 kB 9.69 kB
pages-api.ru...dev.js gzip 11.6 kB 11.6 kB
pages-api.ru..prod.js gzip 9.68 kB 9.68 kB
pages-turbo...prod.js gzip 21.9 kB 21.9 kB
pages.runtim...dev.js gzip 27.7 kB 27.7 kB
pages.runtim..prod.js gzip 21.9 kB 21.9 kB
server.runti..prod.js gzip 916 kB 916 kB
Overall change 2.48 MB 2.48 MB
build cache
vercel/next.js canary vercel/next.js wbinnssmith/split-handle-endpoints Change
0.pack gzip 2.11 MB 2.11 MB N/A
index.pack gzip 75.4 kB 74.5 kB N/A
Overall change 0 B 0 B
Diff details
Diff for main-HASH.js

Diff too large to display

Commit: 75982ba

@wbinnssmith wbinnssmith force-pushed the wbinnssmith/split-handle-endpoints branch 2 times, most recently from 7eb1d8a to 78ad10e Compare January 22, 2025 19:54
@ijjk ijjk added the tests label Jan 22, 2025
@wbinnssmith wbinnssmith force-pushed the wbinnssmith/split-handle-endpoints branch 2 times, most recently from 4574032 to eff8e38 Compare January 23, 2025 00:57
Currently, for `handleEntrypoints`, `handlePagesErrorRoute`, `handleRouteType`, etc, both dev and prod use cases are combined into the same functions. This leads to a lot of branching, use-case-specific arguments, etc. for minimal opportunity for shared code.

In a following PR, entrypoint writing for prod will be done through a single napi call to rust, further branching the two versions.

This splits them formally, at the cost of duplicating a handful of lines in each case. Perhaps in the future we can develop a better system for sharing code, but this makes things far clearer and easier to maintain in this moment.

Test Plan: CI
@wbinnssmith wbinnssmith force-pushed the wbinnssmith/split-handle-endpoints branch from eff8e38 to 75982ba Compare January 23, 2025 00:58
@wbinnssmith wbinnssmith marked this pull request as ready for review January 23, 2025 01:12
@wbinnssmith wbinnssmith requested review from sokra, mischnic and bgw January 23, 2025 01:12
@timneutkens timneutkens merged commit f417761 into canary Jan 23, 2025
130 checks passed
@timneutkens timneutkens deleted the wbinnssmith/split-handle-endpoints branch January 23, 2025 13:25
@github-actions github-actions bot added the locked label Feb 7, 2025
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 7, 2025
# for free to subscribe to this conversation on GitHub. Already have an account? #.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants