-
Notifications
You must be signed in to change notification settings - Fork 30.4k
[turbopack] Make shrinking logic declarative and optimize for immutable tasks #89222
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
Conversation
Tests Passed |
CodSpeed Performance ReportMerging this PR will not alter performanceComparing Summary
Footnotes
|
Stats from current PR✅ No significant changes detected📊 All Metrics📖 Metrics GlossaryDev Server Metrics:
Build Metrics:
Change Thresholds:
⚡ Dev Server
📦 Dev Server (Webpack) (Legacy)📦 Dev Server (Webpack)
⚡ Production Builds
📦 Production Builds (Webpack) (Legacy)📦 Production Builds (Webpack)
📦 Bundle SizesBundle Sizes⚡ TurbopackClient Main Bundles: **432 kB** → **432 kB**
|
| Canary | PR | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 759 B | 766 B | ✓ |
| Total | 759 B | 766 B |
Build Details
Build Manifests
| Canary | PR | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 451 B | 449 B | ✓ |
| Total | 451 B | 449 B | ✅ -2 B |
📦 Webpack
Client
Main Bundles
| Canary | PR | Change | |
|---|---|---|---|
| 5528-HASH.js gzip | 5.47 kB | N/A | - |
| 6280-HASH.js gzip | 54.4 kB | N/A | - |
| 6335.HASH.js gzip | 169 B | N/A | - |
| 912-HASH.js gzip | 4.53 kB | N/A | - |
| e8aec2e4-HASH.js gzip | 62.5 kB | N/A | - |
| framework-HASH.js gzip | 59.7 kB | 59.7 kB | ✓ |
| main-app-HASH.js gzip | 255 B | 253 B | ✓ |
| main-HASH.js gzip | 39 kB | 39 kB | ✓ |
| webpack-HASH.js gzip | 1.68 kB | 1.68 kB | ✓ |
| 262-HASH.js gzip | N/A | 4.52 kB | - |
| 2889.HASH.js gzip | N/A | 169 B | - |
| 5602-HASH.js gzip | N/A | 5.48 kB | - |
| 6948ada0-HASH.js gzip | N/A | 62.5 kB | - |
| 9544-HASH.js gzip | N/A | 55.1 kB | - |
| Total | 228 kB | 228 kB |
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.49 kB | 2.49 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.97 kB | 7.97 kB | ✅ -1 B |
Server
Edge SSR
| Canary | PR | Change | |
|---|---|---|---|
| edge-ssr.js gzip | 126 kB | 126 kB | ✓ |
| page.js gzip | 247 kB | 248 kB | ✓ |
| Total | 374 kB | 374 kB |
Middleware
| Canary | PR | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 616 B | 614 B | ✓ |
| middleware-r..fest.js gzip | 156 B | 155 B | ✓ |
| middleware.js gzip | 33.1 kB | 33.1 kB | ✓ |
| edge-runtime..pack.js gzip | 842 B | 842 B | ✓ |
| Total | 34.7 kB | 34.8 kB |
Build Details
Build Manifests
| Canary | PR | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 732 B | 736 B | ✓ |
| Total | 732 B | 736 B |
Build Cache
| Canary | PR | Change | |
|---|---|---|---|
| 0.pack gzip | 3.77 MB | 3.77 MB | 🔴 +8 kB (+0%) |
| index.pack gzip | 102 kB | 102 kB | ✓ |
| index.pack.old gzip | 103 kB | 101 kB | 🟢 1.16 kB (-1%) |
| Total | 3.97 MB | 3.98 MB |
🔄 Shared (bundler-independent)
Runtimes
| Canary | PR | Change | |
|---|---|---|---|
| app-page-exp...dev.js gzip | 308 kB | 308 kB | ✓ |
| app-page-exp..prod.js gzip | 164 kB | 164 kB | ✓ |
| app-page-tur...dev.js gzip | 308 kB | 308 kB | ✓ |
| app-page-tur..prod.js gzip | 164 kB | 164 kB | ✓ |
| app-page-tur...dev.js gzip | 305 kB | 305 kB | ✓ |
| app-page-tur..prod.js gzip | 162 kB | 162 kB | ✓ |
| app-page.run...dev.js gzip | 305 kB | 305 kB | ✓ |
| app-page.run..prod.js gzip | 162 kB | 162 kB | ✓ |
| app-route-ex...dev.js gzip | 70.2 kB | 70.2 kB | ✓ |
| app-route-ex..prod.js gzip | 48.8 kB | 48.8 kB | ✓ |
| app-route-tu...dev.js gzip | 70.2 kB | 70.2 kB | ✓ |
| app-route-tu..prod.js gzip | 48.8 kB | 48.8 kB | ✓ |
| app-route-tu...dev.js gzip | 69.8 kB | 69.8 kB | ✓ |
| app-route-tu..prod.js gzip | 48.6 kB | 48.6 kB | ✓ |
| app-route.ru...dev.js gzip | 69.8 kB | 69.8 kB | ✓ |
| app-route.ru..prod.js gzip | 48.6 kB | 48.6 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.1 kB | 43.1 kB | ✓ |
| pages-api-tu..prod.js gzip | 32.8 kB | 32.8 kB | ✓ |
| pages-api.ru...dev.js gzip | 43.1 kB | 43.1 kB | ✓ |
| pages-api.ru..prod.js gzip | 32.8 kB | 32.8 kB | ✓ |
| pages-turbo....dev.js gzip | 52.4 kB | 52.4 kB | ✓ |
| pages-turbo...prod.js gzip | 39.3 kB | 39.3 kB | ✓ |
| pages.runtim...dev.js gzip | 52.3 kB | 52.3 kB | ✓ |
| pages.runtim..prod.js gzip | 39.3 kB | 39.3 kB | ✓ |
| server.runti..prod.js gzip | 62.5 kB | 62.5 kB | ✓ |
| Total | 2.75 MB | 2.75 MB |
448c393 to
aa9ffab
Compare
c7ef6df to
8f787c6
Compare
8f787c6 to
63cc9ce
Compare
aa9ffab to
47c3507
Compare
Merge activity
|

Use field annotations to drive what fields get 'shrunk' when a task completes.
Doing this also optimizes the implementation since instead of scanning for each field we care about we walk all fields and handle the correct subset as we find them.
Also take advantage of some features of immutable tasks (which account for about 25% of all tasks), and more aggressively drop some fields
Saves quite a bit of memory and maybe a little bit of time