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

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
# for free to subscribe to this conversation on GitHub. Already have an account? #.
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