Skip to content

perf(benchmark): add a large-app fixture for webpack and Turbopack - #899

Merged
owjs3901 merged 2 commits into
mainfrom
perf/large-app-benchmark
Nov 14, 2026
Merged

owjs3901 merged 2 commits into
mainfrom
perf/large-app-benchmark

Conversation

@owjs3901

@owjs3901 owjs3901 commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Every benchmark fixture is a single page, so costs that grow with an app never show up in the numbers: import resolution, barrels, constants read across modules, and work repeated once per module. The audit's perf findings (resolver re-parses, double extraction from the reservation pre-scan, per-module CSS rendering and state export) all fall in that blind spot.
  • benchmark/large-app.mjs writes 30 routes that render 300 components through one barrel (@/components). Every component reads shared tokens from another module and uses styled, css, responsive arrays and selectors.
  • New rows: devup-ui-large (webpack) and devup-ui-large-turbo (Turbopack), plus -wasm twins that build the same app with engine: 'wasm' to measure the native engine's gain at app scale. They are not gated until a baseline has been calibrated, so this PR can't fail the gate. Generation is included in the timed build, but it writes only files whose content changed (one write per row on a cold CI runner).

Follow-up

Once a few runs have recorded numbers, gate the rows with bun benchmark-check.js --write-baseline. The perf PRs that follow (resolver cache, single extraction, lazy CSS) will be measured against these rows.

Test plan

  • Generator output inspected locally (300 components, 30 routes, barrel)
  • CI benchmark job builds both rows and prints their timings

🤖 Generated with Claude Code

owjs3901 and others added 2 commits November 15, 2026 01:23
Every benchmark app is one page, so costs that grow with an app (import
resolution, barrels, constants read across modules, work repeated per
module) never show up. large-app.mjs writes 30 routes rendering 300
components through one barrel, all reading shared tokens; the
devup-ui-large (webpack) and devup-ui-large-turbo rows build it. The rows
are not gated until they have a calibrated baseline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The -wasm twins of the large rows build the same app with
engine: 'wasm', so the native engine's gain shows at a size where
extraction is a real share of the build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@codecov

codecov Bot commented Nov 14, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@owjs3901
owjs3901 merged commit 09e554b into main Nov 14, 2026
27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant