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

Turbopack: generate less JS before minification #75358

Merged
merged 12 commits into from
Feb 4, 2025
Merged

Conversation

mischnic
Copy link
Contributor

@mischnic mischnic commented Jan 27, 2025

Use the final __turbopack_context_.X directly, which saves use the long destructuring.
The original versions (__turbopack_load__, __turbopack_import__) are still available as the user-facing API (implemented via free var replacements).

src-rolldown-1000 before:

input_len	6.776151mb
output_len	1.318701mb

src-rolldown-1000 after:

input_len	2.879056mb
output_len	1.147727mb
canary (0f7251fc78):
without sourcemaps:
15,3
506.01s user 104.05s system 780% cpu 1:18.21 total
500.73s user 105.54s system 767% cpu 1:18.98 total

with sourcemaps:
23,3gb
542.87s user 119.60s system 752% cpu 1:28.06 total
537.84s user 117.53s system 799% cpu 1:22.02 total
after (e09b2a5517):
without sourcemaps:
14,65gb
503.89s user 102.31s system 770% cpu 1:18.63 total
493.39s user 100.04s system 768% cpu 1:17.18 total
494.93s user 101.16s system 769% cpu 1:17.44 total

with sourcemaps:
22,7
529.38s user 115.85s system 785% cpu 1:22.09 total
522.39s user 115.70s system 781% cpu 1:21.66 total

Closes PACK-3881

@ijjk ijjk added created-by: Turbopack team PRs by the Turbopack team. Turbopack Related to Turbopack with Next.js. labels Jan 27, 2025
Copy link
Contributor Author

mischnic commented Jan 27, 2025

@mischnic mischnic changed the title shorter idents Turbopack: generate less JS before minification Jan 27, 2025
@ijjk
Copy link
Member

ijjk commented Jan 27, 2025

Tests Passed

@ijjk
Copy link
Member

ijjk commented Jan 27, 2025

Stats from current PR

Default Build (Increase detected ⚠️)
General
vercel/next.js canary vercel/next.js mischnic/less-js Change
buildDuration 17.8s 16s N/A
buildDurationCached 15s 13s N/A
nodeModulesSize 392 MB 392 MB
nextStartRea..uration (ms) 440ms 438ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js mischnic/less-js Change
5306-HASH.js gzip 54 kB 53.9 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
framework-HASH.js gzip 57.5 kB 57.5 kB N/A
main-app-HASH.js gzip 241 B 242 B N/A
main-HASH.js gzip 34.5 kB 34.4 kB N/A
webpack-HASH.js gzip 1.71 kB 1.71 kB N/A
Overall change 52.9 kB 52.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js mischnic/less-js 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 mischnic/less-js 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 mischnic/less-js 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 mischnic/less-js Change
index.html gzip 523 B 523 B
link.html gzip 537 B 538 B N/A
withRouter.html gzip 518 B 519 B N/A
Overall change 523 B 523 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js mischnic/less-js Change
edge-ssr.js gzip 129 kB 129 kB N/A
page.js gzip 210 kB 210 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js mischnic/less-js Change
middleware-b..fest.js gzip 669 B 664 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 mischnic/less-js Change
app-page-exp...dev.js gzip 386 kB 386 kB N/A
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 373 kB 373 kB N/A
app-page.run..prod.js gzip 128 kB 128 kB
app-route-ex...dev.js gzip 39.4 kB 39.4 kB
app-route-ex..prod.js gzip 25 kB 25 kB
app-route-tu..prod.js gzip 25 kB 25 kB
app-route-tu..prod.js gzip 24.8 kB 24.8 kB
app-route.ru...dev.js gzip 41 kB 41 kB
app-route.ru..prod.js gzip 24.8 kB 24.8 kB
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
pages-api-tu..prod.js gzip 8.81 kB 8.81 kB
pages-api.ru...dev.js gzip 11.5 kB 11.5 kB
pages-api.ru..prod.js gzip 8.8 kB 8.8 kB
pages-turbo...prod.js gzip 21.6 kB 21.6 kB
pages.runtim...dev.js gzip 31.3 kB 31.3 kB N/A
pages.runtim..prod.js gzip 21.6 kB 21.6 kB
server.runti..prod.js gzip 73.7 kB 73.7 kB
Overall change 870 kB 870 kB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js mischnic/less-js Change
0.pack gzip 2.1 MB 2.1 MB ⚠️ +4.95 kB
index.pack gzip 75.2 kB 75.7 kB ⚠️ +456 B
Overall change 2.18 MB 2.18 MB ⚠️ +5.4 kB
Diff details
Diff for main-HASH.js

Diff too large to display

Diff for app-page-exp..ntime.dev.js
failed to diff
Diff for app-page.runtime.dev.js
failed to diff
Diff for pages.runtime.dev.js

Diff too large to display

Commit: 3afe10c

@mischnic mischnic changed the base branch from mischnic/more-tracing to graphite-base/75358 January 28, 2025 13:47
@mischnic mischnic force-pushed the graphite-base/75358 branch from c7fef68 to 4cc2c5a Compare January 28, 2025 13:47
@mischnic mischnic changed the base branch from graphite-base/75358 to canary January 28, 2025 13:47
@mischnic mischnic force-pushed the mischnic/less-js branch 5 times, most recently from 0b10e92 to d36264e Compare February 3, 2025 12:04
@ijjk ijjk added the tests label Feb 3, 2025
@mischnic mischnic changed the base branch from canary to graphite-base/75358 February 3, 2025 13:04
@mischnic mischnic changed the base branch from graphite-base/75358 to mischnic/module-id-for-idents February 3, 2025 13:04
@mischnic mischnic force-pushed the mischnic/module-id-for-idents branch from ffa9ccd to f892738 Compare February 3, 2025 13:12
Base automatically changed from mischnic/module-id-for-idents to canary February 3, 2025 14:31
@mischnic mischnic requested a review from sokra February 3, 2025 18:02
@mischnic mischnic marked this pull request as ready for review February 3, 2025 18:02
@@ -33,7 +34,8 @@ pub fn create_proxy_module(transition_name: &str, target_import: &str) -> Progra
phase: Default::default(),
})),
ModuleItem::Stmt(quote!(
"__turbopack_export_namespace__($proxy);" as Stmt,
"$turbopack_export_namespace($proxy);" as Stmt,
turbopack_export_namespace: Expr = TURBOPACK_EXPORT_NAMESPACE.into(),
Copy link
Member

Choose a reason for hiding this comment

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

I hope .into() doesn't make it a string expression...

Copy link
Contributor Author

Choose a reason for hiding this comment

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

No:

impl Display for TurbopackRuntimeFunctionShortcut {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        f.write_str(self.full)
    }
}

impl From<&TurbopackRuntimeFunctionShortcut> for FreeVarReference {
    fn from(val: &TurbopackRuntimeFunctionShortcut) -> Self {
        FreeVarReference::Member("__turbopack_context__".into(), val.shortcut.into())
    }
}

impl From<&TurbopackRuntimeFunctionShortcut> for Expr {
    fn from(val: &TurbopackRuntimeFunctionShortcut) -> Self {
        Expr::Member(MemberExpr {
            obj: Box::new(Expr::Ident("__turbopack_context__".into())),
            prop: MemberProp::Ident(val.shortcut.into()),
            ..Default::default()
        })
    }
}

@mischnic mischnic merged commit 5f73def into canary Feb 4, 2025
132 checks passed
@mischnic mischnic deleted the mischnic/less-js branch February 4, 2025 18:44
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 19, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
created-by: Turbopack team PRs by the Turbopack team. locked tests Turbopack Related to Turbopack with Next.js.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants