[Performance] Split and budget the full-product WebUI entry bundle #275

Closed
opened 2026-07-29 13:25:57 +02:00 by zemion · 1 comment
Owner

Problem

The focused full-product build passes, but its entry bundle is approximately 1,393 kB minified / 369 kB gzip and exceeds the current 1,200 kB warning threshold. Optional module permutations work, but eager loading increases startup parse/evaluation cost as more modules are installed.

Scope

Introduce stable lazy-loading boundaries for module pages and other substantial, non-shell features. Add an evidence-based bundle budget without breaking module discovery or optional combinations.

Acceptance criteria

  • Initial shell bundle excludes page implementations that are not needed for first render.
  • Module pages load on navigation with a consistent loading/error state.
  • Core-only and full-product permutation tests/builds pass.
  • CI records initial and largest async chunk sizes and enforces agreed budgets.
  • Before/after load, parse, and transfer measurements are attached.
## Problem The focused full-product build passes, but its entry bundle is approximately 1,393 kB minified / 369 kB gzip and exceeds the current 1,200 kB warning threshold. Optional module permutations work, but eager loading increases startup parse/evaluation cost as more modules are installed. ## Scope Introduce stable lazy-loading boundaries for module pages and other substantial, non-shell features. Add an evidence-based bundle budget without breaking module discovery or optional combinations. ## Acceptance criteria - Initial shell bundle excludes page implementations that are not needed for first render. - Module pages load on navigation with a consistent loading/error state. - Core-only and full-product permutation tests/builds pass. - CI records initial and largest async chunk sizes and enforces agreed budgets. - Before/after load, parse, and transfer measurements are attached. <!-- full-product-webui-bundle-budget-20260729 -->
Author
Owner

Codex State: done

Summary

  • Implemented and pushed in 47e1066. Installed WebUI packages are now represented by build-time-known dynamic descriptor loaders selected by enabled backend package metadata; package barrels no longer pull route pages into the shell. Core provides a shared route loading/error boundary and preserves direct URLs while descriptors load. Every build emits a Vite manifest, enforces 512 KiB raw/160 KiB gzip initial and 384 KiB raw/110 KiB gzip async-chunk budgets, rejects eager module descriptors, writes metrics, and records all permutation results. Search and Risk Compliance now have explicit permutation coverage and Search is in the default host set. Full-product evidence: initial JS 1,387,043 -> 453,769 bytes raw and 364,767 -> 141,725 bytes gzip; parse proxy median 18.776 -> 7.750 ms; 23 descriptors, zero eager; largest async chunk CampaignWorkspace 353,724 raw/98,142 gzip. All 31 permutations and the complete tools/checks/check-focused.sh gate pass.
## Codex State: done ### Summary - Implemented and pushed in 47e1066. Installed WebUI packages are now represented by build-time-known dynamic descriptor loaders selected by enabled backend package metadata; package barrels no longer pull route pages into the shell. Core provides a shared route loading/error boundary and preserves direct URLs while descriptors load. Every build emits a Vite manifest, enforces 512 KiB raw/160 KiB gzip initial and 384 KiB raw/110 KiB gzip async-chunk budgets, rejects eager module descriptors, writes metrics, and records all permutation results. Search and Risk Compliance now have explicit permutation coverage and Search is in the default host set. Full-product evidence: initial JS 1,387,043 -> 453,769 bytes raw and 364,767 -> 141,725 bytes gzip; parse proxy median 18.776 -> 7.750 ms; 23 descriptors, zero eager; largest async chunk CampaignWorkspace 353,724 raw/98,142 gzip. All 31 permutations and the complete tools/checks/check-focused.sh gate pass.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GovOPlaN/govoplan-core#275