-
Notifications
You must be signed in to change notification settings - Fork 30.3k
[turbopack] Move some of the logic for issue filtering into the rust layer #88511
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] Move some of the logic for issue filtering into the rust layer #88511
Conversation
Today turbopack reports a lot of warnings about code in node_modules that is never displayed to users due to filtering logic in packages/next/src/server/dev/turbopack-utils.ts This implements similar logic in rust prior to formatting which should save lots of redundant work tracking import traces and serializing issues across napi that are never displayed to a user.
|
Allow CI Workflow Run
Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer |
This stack of pull requests is managed by Graphite. Learn more about stacking. |
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: **431 kB** → **431 kB**
|
| Canary | PR | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 786 B | 789 B | ✓ |
| Total | 786 B | 789 B |
Build Details
Build Manifests
| Canary | PR | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 450 B | 452 B | ✓ |
| Total | 450 B | 452 B |
📦 Webpack
Client
Main Bundles
| Canary | PR | Change | |
|---|---|---|---|
| 2086.HASH.js gzip | 169 B | N/A | - |
| 2161-HASH.js gzip | 5.41 kB | N/A | - |
| 2747-HASH.js gzip | 4.48 kB | N/A | - |
| 4322-HASH.js gzip | 52.8 kB | N/A | - |
| ec793fe8-HASH.js gzip | 62.3 kB | N/A | - |
| framework-HASH.js gzip | 59.8 kB | 59.8 kB | ✓ |
| main-app-HASH.js gzip | 251 B | 254 B | 🔴 +3 B (+1%) |
| main-HASH.js gzip | 38.6 kB | 39 kB | ✓ |
| webpack-HASH.js gzip | 1.68 kB | 1.68 kB | ✓ |
| 1596.HASH.js gzip | N/A | 169 B | - |
| 2658-HASH.js gzip | N/A | 52.7 kB | - |
| 6349-HASH.js gzip | N/A | 4.46 kB | - |
| 7019-HASH.js gzip | N/A | 5.43 kB | - |
| b17a3386-HASH.js gzip | N/A | 62.3 kB | - |
| Total | 225 kB | 226 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 | 193 B | ✓ |
| _error-HASH.js gzip | 182 B | 182 B | ✓ |
| css-HASH.js gzip | 336 B | 335 B | ✓ |
| dynamic-HASH.js gzip | 1.8 kB | 1.8 kB | ✓ |
| edge-ssr-HASH.js gzip | 256 B | 256 B | ✓ |
| head-HASH.js gzip | 352 B | 349 B | ✓ |
| hooks-HASH.js gzip | 385 B | 384 B | ✓ |
| image-HASH.js gzip | 580 B | 580 B | ✓ |
| index-HASH.js gzip | 259 B | 258 B | ✓ |
| link-HASH.js gzip | 2.5 kB | 2.51 kB | ✓ |
| routerDirect..HASH.js gzip | 319 B | 317 B | ✓ |
| script-HASH.js gzip | 385 B | 387 B | ✓ |
| withRouter-HASH.js gzip | 316 B | 315 B | ✓ |
| 1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
| Total | 7.97 kB | 7.96 kB | ✅ -8 B |
Server
Edge SSR
| Canary | PR | Change | |
|---|---|---|---|
| edge-ssr.js gzip | 125 kB | 125 kB | ✓ |
| page.js gzip | 242 kB | 242 kB | ✓ |
| Total | 366 kB | 367 kB |
Middleware
| Canary | PR | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 653 B | 653 B | ✓ |
| middleware-r..fest.js gzip | 155 B | 156 B | ✓ |
| middleware.js gzip | 33.1 kB | 33.2 kB | ✓ |
| edge-runtime..pack.js gzip | 842 B | 842 B | ✓ |
| Total | 34.7 kB | 34.9 kB |
Build Details
Build Manifests
| Canary | PR | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 738 B | 738 B | ✓ |
| Total | 738 B | 738 B | ✓ |
Build Cache
| Canary | PR | Change | |
|---|---|---|---|
| 0.pack gzip | 3.66 MB | 3.67 MB | 🔴 +7.97 kB (+0%) |
| index.pack gzip | 99.6 kB | 98.2 kB | 🟢 1.4 kB (-1%) |
| index.pack.old gzip | 101 kB | 101 kB | ✓ |
| Total | 3.87 MB | 3.87 MB |
🔄 Shared (bundler-independent)
Runtimes
| Canary | PR | Change | |
|---|---|---|---|
| app-page-exp...dev.js gzip | 304 kB | 304 kB | ✓ |
| app-page-exp..prod.js gzip | 158 kB | 158 kB | ✓ |
| app-page-tur...dev.js gzip | 304 kB | 304 kB | ✓ |
| app-page-tur..prod.js gzip | 158 kB | 158 kB | ✓ |
| app-page-tur...dev.js gzip | 300 kB | 300 kB | ✓ |
| app-page-tur..prod.js gzip | 156 kB | 156 kB | ✓ |
| app-page.run...dev.js gzip | 301 kB | 301 kB | ✓ |
| app-page.run..prod.js gzip | 156 kB | 156 kB | ✓ |
| app-route-ex...dev.js gzip | 68.8 kB | 68.8 kB | ✓ |
| app-route-ex..prod.js gzip | 47.6 kB | 47.6 kB | ✓ |
| app-route-tu...dev.js gzip | 68.8 kB | 68.8 kB | ✓ |
| app-route-tu..prod.js gzip | 47.6 kB | 47.6 kB | ✓ |
| app-route-tu...dev.js gzip | 68.4 kB | 68.4 kB | ✓ |
| app-route-tu..prod.js gzip | 47.4 kB | 47.4 kB | ✓ |
| app-route.ru...dev.js gzip | 68.4 kB | 68.4 kB | ✓ |
| app-route.ru..prod.js gzip | 47.3 kB | 47.3 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 | 41.2 kB | 41.2 kB | ✓ |
| pages-api-tu..prod.js gzip | 31.3 kB | 31.3 kB | ✓ |
| pages-api.ru...dev.js gzip | 41.1 kB | 41.1 kB | ✓ |
| pages-api.ru..prod.js gzip | 31.2 kB | 31.2 kB | ✓ |
| pages-turbo....dev.js gzip | 50.8 kB | 50.8 kB | ✓ |
| pages-turbo...prod.js gzip | 38.2 kB | 38.2 kB | ✓ |
| pages.runtim...dev.js gzip | 50.7 kB | 50.7 kB | ✓ |
| pages.runtim..prod.js gzip | 38.2 kB | 38.2 kB | ✓ |
| server.runti..prod.js gzip | 62.2 kB | 62.2 kB | ✓ |
| Total | 2.69 MB | 2.69 MB | ✓ |
Merging this PR will not alter performance
Comparing Footnotes
|

Optimize issue filtering in Next.js and Turbopack
What?
This PR introduces an
IssueFiltersystem to control which issues are reported based on severity and locationWhy?
To improve performance, we shouldn't spend time formatting issues that will never be displayed to a user.
How?
IssueFilterto control which issues are displayed based on severity and locationInNodeModulescontext condition for better readabilitywarnings_and_foreign_errors()filter that shows: