Skip to content
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

refactor(cna): make create-next-app even smaller and faster #58030

Merged
merged 6 commits into from
Jan 11, 2024

Conversation

SukkaW
Copy link
Contributor

@SukkaW SukkaW commented Nov 4, 2023

The PR further reduces the create-next-app installation size by another 80 KiB:

  • Replace the callback version of Node.js built-in dns API usage with dns/promise + async/await
  • Replace got w/ fetch since Next.js and create-next-app now target Node.js 18.17.0+
  • Download and extract the tar.gz file in the memory (without creating temporary files). This improves the performance.
  • Some other minor refinements.

Following these changes, the size of dist/index.js is now 536 KiB.

@ijjk ijjk added the create-next-app Related to our CLI tool for quickly starting a new Next.js application. label Nov 4, 2023
@ijjk
Copy link
Member

ijjk commented Nov 4, 2023

Stats from current PR

Default Build
General
vercel/next.js canary SukkaW/next.js refactor-cna-1 Change
buildDuration 12.9s 12.9s N/A
buildDurationCached 7.2s 6.2s N/A
nodeModulesSize 200 MB 200 MB
nextStartRea..uration (ms) 427ms 424ms N/A
Client Bundles (main, webpack)
vercel/next.js canary SukkaW/next.js refactor-cna-1 Change
193.HASH.js gzip 181 B 182 B N/A
3f784ff6-HASH.js gzip 53.3 kB 53.3 kB N/A
433-HASH.js gzip 28.5 kB 28.6 kB N/A
framework-HASH.js gzip 45.2 kB 45.2 kB
main-app-HASH.js gzip 239 B 242 B N/A
main-HASH.js gzip 31.8 kB 31.8 kB N/A
webpack-HASH.js gzip 1.7 kB 1.7 kB N/A
Overall change 45.2 kB 45.2 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary SukkaW/next.js refactor-cna-1 Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary SukkaW/next.js refactor-cna-1 Change
_app-HASH.js gzip 194 B 195 B N/A
_error-HASH.js gzip 183 B 181 B N/A
amp-HASH.js gzip 504 B 502 B N/A
css-HASH.js gzip 321 B 321 B
dynamic-HASH.js gzip 2.5 kB 2.5 kB N/A
edge-ssr-HASH.js gzip 255 B 253 B N/A
head-HASH.js gzip 350 B 349 B N/A
hooks-HASH.js gzip 369 B 369 B
image-HASH.js gzip 4.28 kB 4.28 kB N/A
index-HASH.js gzip 255 B 256 B N/A
link-HASH.js gzip 2.61 kB 2.61 kB
routerDirect..HASH.js gzip 312 B 311 B N/A
script-HASH.js gzip 385 B 383 B N/A
withRouter-HASH.js gzip 307 B 308 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 3.4 kB 3.4 kB
Client Build Manifests
vercel/next.js canary SukkaW/next.js refactor-cna-1 Change
_buildManifest.js gzip 483 B 484 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary SukkaW/next.js refactor-cna-1 Change
index.html gzip 528 B 527 B N/A
link.html gzip 540 B 540 B
withRouter.html gzip 523 B 523 B
Overall change 1.06 kB 1.06 kB
Edge SSR bundle Size
vercel/next.js canary SukkaW/next.js refactor-cna-1 Change
edge-ssr.js gzip 93.9 kB 93.9 kB N/A
page.js gzip 148 kB 148 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary SukkaW/next.js refactor-cna-1 Change
middleware-b..fest.js gzip 624 B 623 B N/A
middleware-r..fest.js gzip 151 B 151 B
middleware.js gzip 37.5 kB 37.5 kB N/A
edge-runtime..pack.js gzip 1.92 kB 1.92 kB
Overall change 2.07 kB 2.07 kB
Next Runtimes
vercel/next.js canary SukkaW/next.js refactor-cna-1 Change
app-page-exp...dev.js gzip 169 kB 169 kB
app-page-exp..prod.js gzip 95.3 kB 95.3 kB
app-page-tur..prod.js gzip 96 kB 96 kB
app-page-tur..prod.js gzip 90.6 kB 90.6 kB
app-page.run...dev.js gzip 142 kB 142 kB
app-page.run..prod.js gzip 89.9 kB 89.9 kB
app-route-ex...dev.js gzip 24.1 kB 24.1 kB
app-route-ex..prod.js gzip 16.7 kB 16.7 kB
app-route-tu..prod.js gzip 16.7 kB 16.7 kB
app-route-tu..prod.js gzip 16.3 kB 16.3 kB
app-route.ru...dev.js gzip 23.5 kB 23.5 kB
app-route.ru..prod.js gzip 16.3 kB 16.3 kB
pages-api-tu..prod.js gzip 9.38 kB 9.38 kB
pages-api.ru...dev.js gzip 9.65 kB 9.65 kB
pages-api.ru..prod.js gzip 9.37 kB 9.37 kB
pages-turbo...prod.js gzip 21.9 kB 21.9 kB
pages.runtim...dev.js gzip 22.5 kB 22.5 kB
pages.runtim..prod.js gzip 21.9 kB 21.9 kB
server.runti..prod.js gzip 49.5 kB 49.5 kB
Overall change 940 kB 940 kB
Commit: ae1c96a

@SukkaW SukkaW changed the title [WIP] refactor(cna): replace callback-based dns API w/ promise-based refactor(cna): make create-next-app even smaller Nov 4, 2023
@SukkaW SukkaW marked this pull request as ready for review November 4, 2023 20:09
@SukkaW SukkaW requested review from a team as code owners November 4, 2023 20:09
@ijjk
Copy link
Member

ijjk commented Nov 4, 2023

Tests Passed

@SukkaW SukkaW marked this pull request as draft November 4, 2023 20:24
@SukkaW SukkaW marked this pull request as ready for review November 4, 2023 21:22
@SukkaW SukkaW changed the title refactor(cna): make create-next-app even smaller refactor(cna): make create-next-app even smaller and faster Nov 5, 2023
Copy link
Member

@styfle styfle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great, thanks!

@SukkaW
Copy link
Contributor Author

SukkaW commented Jan 11, 2024

@styfle I just rebased the PR and fixed the conflicts inside the pnpm-lock.yaml.

Copy link
Member

@styfle styfle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work, thanks! 🎉

@styfle styfle merged commit b8b1045 into vercel:canary Jan 11, 2024
67 checks passed
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jan 26, 2024
@SukkaW SukkaW deleted the refactor-cna-1 branch June 28, 2024 02:48
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
create-next-app Related to our CLI tool for quickly starting a new Next.js application. locked
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants