Skip to content

Turbopack: require(/* turbopackChunkingType: parallel */#91278

Merged
mischnic merged 1 commit intocanaryfrom
mischnic/require-turbopackChunkingType
Mar 14, 2026
Merged

Turbopack: require(/* turbopackChunkingType: parallel */#91278
mischnic merged 1 commit intocanaryfrom
mischnic/require-turbopackChunkingType

Conversation

@mischnic
Copy link
Member

@mischnic mischnic commented Mar 12, 2026

  1. Add the CJS version of import ... with {"turbopack-chunking-type: "parallel"
  2. Allow shared as a chunking type
  3. Improve error message for invalid values:
Bildschirmfoto 2026-03-13 um 15 07 06

@nextjs-bot nextjs-bot added created-by: Turbopack team PRs by the Turbopack team. Turbopack Related to Turbopack with Next.js. labels Mar 12, 2026
Copy link
Member Author

mischnic commented Mar 12, 2026

@mischnic mischnic marked this pull request as ready for review March 12, 2026 20:10
@mischnic mischnic requested a review from a team March 12, 2026 20:12
@mischnic mischnic force-pushed the mischnic/require-turbopackChunkingType branch from bc9cf2c to 5ce35de Compare March 12, 2026 20:24
@codspeed-hq
Copy link

codspeed-hq bot commented Mar 12, 2026

Merging this PR will not alter performance

✅ 17 untouched benchmarks
⏩ 3 skipped benchmarks1


Comparing mischnic/require-turbopackChunkingType (f1eb8a9) with canary (baad064)

Open in CodSpeed

Footnotes

  1. 3 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Mar 12, 2026

Tests Passed

@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Mar 12, 2026

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

Metric Canary PR Change Trend
Cold (Listen) 456ms 456ms ▁▁▁▁▇
Cold (Ready in log) 443ms 445ms ▁▁▁▁▇
Cold (First Request) 896ms 889ms ▃▃▁▁▇
Warm (Listen) 456ms 457ms ▁▁▁▁▇
Warm (Ready in log) 442ms 444ms ▁▁▁▁▇
Warm (First Request) 356ms 359ms ▁▁▂▁▇
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 456ms 455ms ▆▆▆▃▆
Cold (Ready in log) 439ms 439ms ▅▆█▇█
Cold (First Request) 1.945s 1.955s ▁▁▃▂▂
Warm (Listen) 456ms 456ms ██▁▁▁
Warm (Ready in log) 439ms 440ms ▅▂▄▅▅
Warm (First Request) 1.962s 1.964s ▂▁▂▂▁

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 4.014s 3.964s ▁▁▁▂▇
Cached Build 3.959s 3.954s ▁▁▁▂▆
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 14.379s 14.376s ▁▁▁▂▁
Cached Build 14.532s 14.645s ▁▁▂▁▁
node_modules Size 482 MB 482 MB ▁▁▁▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
0_6xxv2jiaklh.js gzip 13.6 kB N/A -
0.-r71sd1j_zb.js gzip 7.61 kB N/A -
0~lwfcrlb4v_9.css gzip 115 B 115 B
00h0nz7r436~l.js gzip 13.3 kB N/A -
02ku7edzc_wf7.js gzip 450 B N/A -
03~yq9q893hmn.js gzip 39.4 kB 39.4 kB
07sn0b4nbcn1d.js gzip 48 kB N/A -
092lcb3fqrrf9.js gzip 8.52 kB N/A -
09aojw2sfnh9w.js gzip 158 B N/A -
0aj~xs1l1g8tg.js gzip 8.53 kB N/A -
0b_vmvwyei9.js gzip 162 B N/A -
0c9-9hu.1pepj.js gzip 154 B N/A -
0dv70_.gmif78.js gzip 65.7 kB N/A -
0h35gmp9u328z.js gzip 8.54 kB N/A -
0h6fkavebp.iz.js gzip 8.47 kB N/A -
0hd-ql2h2r4cn.js gzip 155 B N/A -
0ino_yf1k3h6k.js gzip 10.4 kB N/A -
0ip7lm~usinza.js gzip 155 B N/A -
0j-zh.3ht.p4o.js gzip 157 B N/A -
0k.sixc712dq1.js gzip 10.1 kB N/A -
0kkm7tesfinr6.js gzip 12.9 kB N/A -
0kksp53y6_-a9.js gzip 154 B N/A -
0moy~uao4dl.m.js gzip 9.19 kB N/A -
0q50rtpusjy90.js gzip 2.28 kB N/A -
0qxky9-n~u1p4.js gzip 163 B N/A -
0s10x3rw-134r.js gzip 70.8 kB N/A -
0smgy2grrrlka.js gzip 8.58 kB N/A -
0t0whz-iuxthr.js gzip 157 B N/A -
0t1dzhdfh0txh.js gzip 215 B 215 B
0w-k48_buuwdr.js gzip 157 B N/A -
0xeiazrbzzv44.js gzip 154 B N/A -
0zid7o0-vupvp.js gzip 225 B N/A -
11yo3xfd6b147.js gzip 12.9 kB N/A -
13.84hqxl_1p7.js gzip 9.76 kB N/A -
13mwr00h1ccuz.js gzip 157 B N/A -
1554wr-t7p6z-.js gzip 8.55 kB N/A -
15tjst79~qy3_.js gzip 1.46 kB N/A -
15z_v00ne4ud0.js gzip 8.47 kB N/A -
17242a2mp76au.js gzip 169 B N/A -
17d_m3p4j9w6r.js gzip 5.62 kB N/A -
17yu~3yiu7d2m.js gzip 8.52 kB N/A -
turbopack-0...k.n..js gzip 4.16 kB N/A -
turbopack-01..u_f..js gzip 4.16 kB N/A -
turbopack-04..h.1v.js gzip 4.16 kB N/A -
turbopack-06..3inv.js gzip 4.16 kB N/A -
turbopack-0e..ad2y.js gzip 4.17 kB N/A -
turbopack-0g..dald.js gzip 4.16 kB N/A -
turbopack-0j..z7m6.js gzip 4.16 kB N/A -
turbopack-0n..c0sc.js gzip 4.16 kB N/A -
turbopack-0p..ti57.js gzip 4.16 kB N/A -
turbopack-0q..webl.js gzip 4.14 kB N/A -
turbopack-0s..w3_k.js gzip 4.16 kB N/A -
turbopack-11..x-t6.js gzip 4.16 kB N/A -
turbopack-13..tm26.js gzip 4.16 kB N/A -
turbopack-14..on.t.js gzip 4.16 kB N/A -
0_~83b5e6e7l0.js gzip N/A 13.6 kB -
0.vygkt6.oiju.js gzip N/A 157 B -
0~5wik339id-8.js gzip N/A 153 B -
03t__~.5lvgeu.js gzip N/A 5.62 kB -
04d6ll75jqx3r.js gzip N/A 9.19 kB -
0583exyh-yhc7.js gzip N/A 9.76 kB -
05b07nana~4_..js gzip N/A 10.1 kB -
06o0rvpyi86bj.js gzip N/A 157 B -
07-x3bpms-s9t.js gzip N/A 70.8 kB -
072lv63r8dcz~.js gzip N/A 8.58 kB -
08cf9bbqs5u3h.js gzip N/A 161 B -
0apkzi79a8f6c.js gzip N/A 157 B -
0ar1~bwpezfgw.js gzip N/A 13.3 kB -
0c99mq1ez2bke.js gzip N/A 450 B -
0cdn5udqxvge3.js gzip N/A 156 B -
0cq-cmde_ws6u.js gzip N/A 8.47 kB -
0fwf102w10o9~.js gzip N/A 8.52 kB -
0gg3dtp0n4p.y.js gzip N/A 154 B -
0gtmn.q_j1v5r.js gzip N/A 10.4 kB -
0i~r5.wh-edq4.js gzip N/A 156 B -
0jbal_o7xtsxp.js gzip N/A 169 B -
0jhtb~3297y0u.js gzip N/A 48 kB -
0jq6ih6j6xxph.js gzip N/A 155 B -
0l4d~z7ixj3wz.js gzip N/A 12.9 kB -
0lmi1ca8yr_v1.js gzip N/A 156 B -
0m-4sjcvavf15.js gzip N/A 65.7 kB -
0nclq9z6yzzm5.js gzip N/A 1.46 kB -
0nzumcogektg7.js gzip N/A 8.55 kB -
0s.c-cn5eebrx.js gzip N/A 8.47 kB -
0tna7lg6q4zne.js gzip N/A 12.9 kB -
0votdfxr5fb5u.js gzip N/A 2.28 kB -
0xkuhv202qqhu.js gzip N/A 7.6 kB -
0ykl9bs_qj.5..js gzip N/A 8.52 kB -
0yx1xky7t0e8e.js gzip N/A 160 B -
0zfen0tnxp4gh.js gzip N/A 8.55 kB -
0zqkw42-xtx6w.js gzip N/A 157 B -
10wkq1h9jzkg..js gzip N/A 225 B -
149ndfh8zfcaz.js gzip N/A 8.53 kB -
turbopack-0-..a0gs.js gzip N/A 4.16 kB -
turbopack-0~..ss-..js gzip N/A 4.16 kB -
turbopack-02..~qfd.js gzip N/A 4.16 kB -
turbopack-04..8.b8.js gzip N/A 4.16 kB -
turbopack-0b..fd.o.js gzip N/A 4.16 kB -
turbopack-0c..hp_7.js gzip N/A 4.16 kB -
turbopack-0c..0v.e.js gzip N/A 4.16 kB -
turbopack-0c..qnrp.js gzip N/A 4.16 kB -
turbopack-0e..m-.n.js gzip N/A 4.14 kB -
turbopack-0g..pnt1.js gzip N/A 4.18 kB -
turbopack-0k..1u0a.js gzip N/A 4.16 kB -
turbopack-0u..evws.js gzip N/A 4.16 kB -
turbopack-0v..7286.js gzip N/A 4.16 kB -
turbopack-0w..t21o.js gzip N/A 4.16 kB -
Total 462 kB 462 kB ⚠️ +3 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 714 B 705 B 🟢 9 B (-1%)
Total 714 B 705 B ✅ -9 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 428 B 430 B
Total 428 B 430 B ⚠️ +2 B

📦 Webpack

Client

Main Bundles
Canary PR Change
5528-HASH.js gzip 5.54 kB N/A -
6280-HASH.js gzip 59.9 kB N/A -
6335.HASH.js gzip 169 B N/A -
912-HASH.js gzip 4.59 kB N/A -
e8aec2e4-HASH.js gzip 62.7 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 256 B 254 B
main-HASH.js gzip 39.2 kB 39.2 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
262-HASH.js gzip N/A 4.59 kB -
2889.HASH.js gzip N/A 169 B -
5602-HASH.js gzip N/A 5.55 kB -
6948ada0-HASH.js gzip N/A 62.7 kB -
9544-HASH.js gzip N/A 60.6 kB -
Total 234 kB 235 kB ⚠️ +721 B
Polyfills
Canary PR Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Total 39.4 kB 39.4 kB
Pages
Canary PR Change
_app-HASH.js gzip 194 B 194 B
_error-HASH.js gzip 183 B 180 B 🟢 3 B (-2%)
css-HASH.js gzip 331 B 330 B
dynamic-HASH.js gzip 1.81 kB 1.81 kB
edge-ssr-HASH.js gzip 256 B 256 B
head-HASH.js gzip 351 B 352 B
hooks-HASH.js gzip 384 B 383 B
image-HASH.js gzip 580 B 581 B
index-HASH.js gzip 260 B 260 B
link-HASH.js gzip 2.51 kB 2.51 kB
routerDirect..HASH.js gzip 320 B 319 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 315 B 315 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.98 kB 7.98 kB ✅ -1 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 125 kB 125 kB
page.js gzip 268 kB 267 kB
Total 393 kB 392 kB ✅ -342 B
Middleware
Canary PR Change
middleware-b..fest.js gzip 617 B 615 B
middleware-r..fest.js gzip 156 B 155 B
middleware.js gzip 43.7 kB 43.7 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 45.3 kB 45.3 kB ⚠️ +62 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 715 B 718 B
Total 715 B 718 B ⚠️ +3 B
Build Cache
Canary PR Change
0.pack gzip 4.26 MB 4.26 MB
index.pack gzip 108 kB 108 kB
index.pack.old gzip 108 kB 108 kB
Total 4.48 MB 4.48 MB ✅ -2.54 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 332 kB 332 kB
app-page-exp..prod.js gzip 180 kB 180 kB
app-page-tur...dev.js gzip 332 kB 332 kB
app-page-tur..prod.js gzip 180 kB 180 kB
app-page-tur...dev.js gzip 328 kB 328 kB
app-page-tur..prod.js gzip 178 kB 178 kB
app-page.run...dev.js gzip 329 kB 329 kB
app-page.run..prod.js gzip 178 kB 178 kB
app-route-ex...dev.js gzip 76 kB 76 kB
app-route-ex..prod.js gzip 51.7 kB 51.7 kB
app-route-tu...dev.js gzip 76 kB 76 kB
app-route-tu..prod.js gzip 51.7 kB 51.7 kB
app-route-tu...dev.js gzip 75.6 kB 75.6 kB
app-route-tu..prod.js gzip 51.5 kB 51.5 kB
app-route.ru...dev.js gzip 75.5 kB 75.5 kB
app-route.ru..prod.js gzip 51.4 kB 51.4 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 43.3 kB 43.3 kB
pages-api-tu..prod.js gzip 33 kB 33 kB
pages-api.ru...dev.js gzip 43.3 kB 43.3 kB
pages-api.ru..prod.js gzip 33 kB 33 kB
pages-turbo....dev.js gzip 52.7 kB 52.7 kB
pages-turbo...prod.js gzip 38.6 kB 38.6 kB
pages.runtim...dev.js gzip 52.7 kB 52.7 kB
pages.runtim..prod.js gzip 38.6 kB 38.6 kB
server.runti..prod.js gzip 62.4 kB 62.4 kB
Total 2.95 MB 2.95 MB ⚠️ +4 B
📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/f1eb8a90d52770997abb6a71f738a8d2994d5413/next

@mischnic mischnic changed the title require(/* turbopackChunkingType: parallel */ Turbopack: require(/* turbopackChunkingType: parallel */ Mar 13, 2026
@mischnic mischnic force-pushed the mischnic/require-turbopackChunkingType branch from 5ce35de to 6fbb825 Compare March 13, 2026 14:18
@mischnic mischnic requested a review from lukesandberg March 13, 2026 14:56
@mischnic mischnic force-pushed the mischnic/require-turbopackChunkingType branch 2 times, most recently from f617334 to 7a620f4 Compare March 13, 2026 15:40
@mischnic mischnic changed the base branch from canary to graphite-base/91278 March 13, 2026 18:19
@mischnic mischnic force-pushed the mischnic/require-turbopackChunkingType branch from 7a620f4 to a9d5f25 Compare March 13, 2026 18:19
@mischnic mischnic changed the base branch from graphite-base/91278 to ineffective_tasks March 13, 2026 18:19
@lukesandberg lukesandberg changed the base branch from ineffective_tasks to graphite-base/91278 March 13, 2026 18:54
@lukesandberg lukesandberg force-pushed the mischnic/require-turbopackChunkingType branch from a9d5f25 to e63dd0a Compare March 13, 2026 18:55
@graphite-app graphite-app bot changed the base branch from graphite-base/91278 to canary March 13, 2026 18:56
@lukesandberg lukesandberg force-pushed the mischnic/require-turbopackChunkingType branch from e63dd0a to de4534b Compare March 13, 2026 18:56
@mischnic mischnic requested a review from a team March 13, 2026 19:13
Copy link
Member Author

There appears to be a perf regression indeed

Comparing mischnic/require-turbopackChunkingType (de4534b) with canary (236a76d)

➜  next.js-other git:(236a76dd0f) cargo bench -p turbopack-ecmascript -- references/jsonwebtoken.js/full
    Finished `bench` profile [optimized] target(s) in 0.26s
     Running benches/analyzer.rs (target/release/deps/analyzer-52e8f6a45abeb58d)
     Running benches/references.rs (target/release/deps/references-c43138b9c88875c0)
references/jsonwebtoken.js/full
                        time:   [62.515 ms 62.631 ms 62.757 ms]
Found 10 outliers among 100 measurements (10.00%)
  10 (10.00%) high mild


➜  next.js-other git:(mischnic/require-turbopackChunkingType) cargo bench -p turbopack-ecmascript -- references/jsonwebtoken.js/full
    Finished `bench` profile [optimized] target(s) in 0.38s
     Running benches/analyzer.rs (target/release/deps/analyzer-52e8f6a45abeb58d)
     Running benches/references.rs (target/release/deps/references-c43138b9c88875c0)
references/jsonwebtoken.js/full
                        time:   [65.984 ms 66.616 ms 67.717 ms]
                        change: [+5.2936% +6.3622% +8.3213%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 3 outliers among 100 measurements (3.00%)
  2 (2.00%) high mild
  1 (1.00%) high severe

mischnic added a commit that referenced this pull request Mar 14, 2026
#91347)

The JS analyze microbenchmark got 23% faster:

Only a tiny fraction of imports have annotations, be it `import ... with {...}` or `require(/*webpackIgnore: true*/...)`, so a `Option<Pointer<Struct>>` mkes sense here.
```
canary:
references/jsonwebtoken.js/full
                        time:   [63.250 ms 63.918 ms 64.752 ms]
                        change: [-5.2380% -3.0074% -0.8753%] (p = 0.01 < 0.05)
                        Change within noise threshold.
Found 12 outliers among 100 measurements (12.00%)
  5 (5.00%) high mild
  7 (7.00%) high severe


now:
references/jsonwebtoken.js/full
                        time:   [49.070 ms 49.166 ms 49.273 ms]
                        change: [-24.097% -23.079% -22.237%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 6 outliers among 100 measurements (6.00%)
  3 (3.00%) high mild
  3 (3.00%) high severe
````

This came up in #91278 (comment), which added another (tiny) field to ImportAttributes. But it caused a 6% regression in the microbenchmark anyway.
@mischnic mischnic force-pushed the mischnic/require-turbopackChunkingType branch from de4534b to f1eb8a9 Compare March 14, 2026 10:52
@mischnic mischnic merged commit 855f0a3 into canary Mar 14, 2026
290 of 292 checks passed
Copy link
Member Author

Merge activity

@mischnic mischnic deleted the mischnic/require-turbopackChunkingType branch March 14, 2026 12:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

created-by: Turbopack team PRs by the Turbopack team. Turbopack Related to Turbopack with Next.js.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants