Commit Graph

11 Commits

Author SHA1 Message Date
Will Binns-Smith 2f3f74b13f bundle-analyzer: add compare view with treemap diff (#93521)
Adds a compare mode to the bundle analyzer. When the user picks a
historical snapshot from the new baseline picker in the top bar, the UI
switches into compare mode: routes are diff'd by name and size, and the
per-route view shows a `DiffTreemap` that colors each source tile by its
change status (added/removed/grew/shrank/unchanged).

The compare sidebar shows the import chain for the selected tile on
either the baseline ("A") or current ("B") side. Route totals are
fetched in parallel so the route picker can sort by largest impact and
classify routes as `changed`/`identical` rather than just name-presence.

<!-- NEXT_JS_LLM_PR -->

---------

Co-authored-by: vercel-fleet-prod[bot] <318278635+vercel-fleet-prod[bot]@users.noreply.github.com>
Co-authored-by: Will Binns-Smith <755844+wbinnssmith@users.noreply.github.com>
2026-09-10 12:47:55 -07:00
Will Binns-Smith 57a8476086 bundle-analyzer: record historical snapshots on each analyze run (#93520)
After each `next experimental-analyze` run, snapshot the output data
into a rolling `history/` directory so later builds can use it as a
comparison baseline.

Each snapshot gets a `metadata.json` with git branch/sha/dirty status,
Next.js version, and route count. A `history/history.json` index
(newest-first, capped at 20 entries) lets the UI list available
baselines without re-reading every snapshot directory. Old snapshots
beyond the cap are pruned automatically.

The client-side `SnapshotMetadata` type mirror lives in
`apps/bundle-analyzer/lib/snapshot.ts` so the compare UI can reference
it without a build-time dependency on the Next.js package.

<!-- NEXT_JS_LLM_PR -->

---------

Co-authored-by: vercel-fleet-prod[bot] <318278635+vercel-fleet-prod[bot]@users.noreply.github.com>
Co-authored-by: Will Binns-Smith <755844+wbinnssmith@users.noreply.github.com>
2026-09-09 14:11:28 -07:00
Niklas Mischkulnig 0e6f52e99b Turbopack: fix bundle-analyzer for NFT change (#93363)
We have no testing infrastructure, unfortunately

<img width="2254" height="1260" alt="Bildschirmfoto 2026-05-28 um 20 29
58"
src="https://github.com/user-attachments/assets/a9f1b646-994d-4417-98d7-160ce5249032"
/>
2026-06-02 18:24:38 +02:00
Will Binns-Smith 5809756f55 bundle-analyzer: merge _app route modules into current route visualization (#90841)
This:

- Fetches `data/_app/analyze.data` alongside the current route's data
- Merges `_app` modules into the current route's `AnalyzeData` before
visualization using a `mergeAnalyzeData()`, which merges the two
datasets, reindexing the additional ones and recreating the binary data
format expected by the treemap.

## Test plan

- [x] Add a large dependency (e.g. `moment`) in `pages/_app.tsx`
- [x] Run `next experimental-analyze`
- [x] Open the bundle analyzer and select a pages page
- [x] Verify moment appears in the treemap
- [x] Verify App Router projects (no `_app`) work without errors
2026-03-12 14:52:36 -07:00
Will Binns-Smith ec85895d74 bundle-analyzer: Show compressed sizes (#87093) 2025-12-16 05:49:54 +00:00
Will Binns-Smith 585126e2b3 bundle-analyzer: Add sizes to treemap, status bar (#86966)
![CleanShot 2025-12-08 at 19.58.55@2x.png](https://app.graphite.com/user-attachments/assets/43f13844-abe2-4a1b-bbc4-764554ca6634.png)
2025-12-09 15:02:54 -08:00
Will Binns-Smith 2ac04b03e9 bundle-analyzer: redesign info hierarchy in sidebar (#86963)
This better reflects the information hierarchy in the design and declutters the sidebar.

This PR also adds recursive size calculation when directories are selected.

Closes PACK-5828
Closes PACK-6030

![image.png](https://app.graphite.com/user-attachments/assets/83297d13-1689-4fc2-a254-4c0d1f21aaba.png)

![image.png](https://app.graphite.com/user-attachments/assets/fb3c76bc-61ae-4f50-a64c-fad0ff3ec9a8.png)

![image.png](https://app.graphite.com/user-attachments/assets/6d85c828-4917-4546-b8e9-742035635d73.png)
2025-12-09 14:28:00 -08:00
Tobias Koppers e9a3ba935f Turbopack: fix import chain by determining depth locally per route (#86350)
### What?

fix the import chain showing only modules relevant to the current route

fix module graph being merged by path. It's keyed by identifier now.

also add more info to import chain, e. g. layer info. and more details in tooltip.
2025-11-21 11:39:18 +01:00
Will Binns-Smith 24033486b5 next-analyze: improve network error visuals (#86222)
This improves how network errors (such as when the bundle analyzer error server is shut down) are shown.

Fixes PACK-5877

![image.png](https://app.graphite.com/user-attachments/assets/69e57bb7-03ca-45ec-9816-f4bc512bfd58.png)

![image.png](https://app.graphite.com/user-attachments/assets/450ed52c-5368-49ee-a149-e7b17a8c21db.png)
2025-11-20 11:13:57 -08:00
Will Binns-Smith 3e5b96a17e next analyze: annotate polyfill modules in UI (#86062)
For small routes, it can appear like the polyfill chunk takes up a sizable amount of data, but `polyfill-nomodule.js` is only sent to legacy browsers. This makes it clearer.

This PR enhances the bundle analyzer by adding visual indicators for polyfill chunks, and noting they're conditionally sent to modern or legacy browsers. The changes include:

- Adds a source map to polyfill chunks (for the large pre-bundled input only)
- Visually distinguished polyfill chunks in the treemap by lightening their color
- Added a "Polyfill" badge (other badges coming soon!) with text when viewing polyfill chunk details

<img width="388" height="227" alt="image" src="https://github.com/user-attachments/assets/bcebfba6-1e10-459a-9364-b6b8197cd3df" />

Fixes PACK-5826
2025-11-17 18:02:03 -08:00
Will Binns-Smith 617ead5753 Turbopack: Add bundle analyzer UI to next build --experimental-analyze (#85788)
This adds an interactive Treemap-style bundle analyzer app to the Next.js codebase and writes a copy to disk when `next build --experimental-analyze` is run.

* It's a separate app in `apps/bundle-analyzer` as `@next/bundle-analyzer-ui` that uses `output: 'export'` to export a purely static Next.js app
* These static resources are copied into Next.js's published `dist` directory in the `next` package itself. Users never depend on `@next/bundle-analyzer-ui`
* When users run `next build --experimental-analyze`, these static resources are copied into the user's `.next/diagnostics/analyze` along with the data payloads needed to visualize the user's app

In an upcoming PR, we'll add `next experimental-analyze` that will create analysis files without build artifacts, as well as optionally start a static file server.

Test Plan: Ran `next build --experimental-analyze` in a test app and ran a static file server to run it.
2025-11-14 15:50:42 -08:00