Files
kite/.planning/perf/phase11-final-summary.md
T
curo1305 df981fbced docs(11-06): write Phase 11 bundle final summary — baseline vs final comparison
Baseline: 264.63 kB main / 89.34 kB gzip / 15 JS chunks
Final:    183.62 kB main / 64.83 kB gzip / 21 JS chunks

Delta: -81.01 kB raw (-30.6%), -24.51 kB gzip (-27.4%), +6 new lazy chunks

Documents the 5 new lazy route chunks from Plan 11-02 (SettingsView,
TopicsView, DocumentView, CloudStorageView, CloudFolderView), CSS growth
from new responsive Tailwind classes, and the intentional synchronous
FileManagerView decision (D-10, critical first authenticated surface).
2026-06-17 07:58:14 +02:00

80 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Phase 11 Bundle Final Summary — Baseline vs. Final Comparison
**Captured:** 2026-06-17
**Vite version:** 6.4.3
**Node environment:** production
## Command
```bash
cd frontend && npm run build
cd frontend && ANALYZE=true npm run build # generates stats.html → .planning/perf/phase11-final.html
```
## Side-by-Side Comparison
| Metric | Baseline (pre-11-02) | Final (post-Phase-11) | Delta |
|--------|---------------------|----------------------|-------|
| Main bundle — raw | 264.63 kB | 183.62 kB | **-81.01 kB (-30.6%)** |
| Main bundle — gzip | 89.34 kB | 64.83 kB | **-24.51 kB (-27.4%)** |
| CSS main — raw | 98.74 kB | 102.35 kB | +3.61 kB |
| CSS main — gzip | 17.12 kB | 17.69 kB | +0.57 kB |
| JS chunk count | 15 chunks | 21 chunks | **+6 chunks** |
| Total output files | 15 | 23 | +8 |
## What Changed
### Main bundle reduction (81 kB raw)
Plan 11-02 lazy-loaded 5 user routes that were previously synchronous imports. This split their code out of the main bundle and into dedicated chunks:
| New lazy chunk | Size (raw) | Size (gzip) | Route |
|----------------|-----------|------------|-------|
| `SettingsView-*.js` | 62.72 kB | 20.08 kB | `/settings` |
| `TopicsView-*.js` | 12.31 kB | 3.96 kB | `/topics`, `/topics/:name` |
| `DocumentView-*.js` | 10.17 kB | 3.77 kB | `/document/:id` |
| `CloudStorageView-*.js` | 2.32 kB | 1.24 kB | `/cloud` |
| `CloudFolderView-*.js` | 1.99 kB | 1.06 kB | `/cloud/:provider/:folderId` |
| `AppSpinner-*.js` | 0.51 kB | 0.37 kB | (shared sub-chunk for spinner) |
`SettingsView` contains the TotpEnrollment, PasswordStrengthBar, and cloud-connection components — it alone accounts for ~62 kB of the reduction.
### CSS slight increase (+3.6 kB raw)
The responsive layout additions in Plans 11-03/11-04/11-05 added new Tailwind utility classes (`translate-x-0`, `-translate-x-full`, `max-h-[90vh]`, `overflow-y-auto`, `focus-visible:ring-*`, `min-h-[36px]`, `min-w-[36px]`) that were not in the purged baseline. The modest increase confirms these classes are in active use.
### AdminLayout now includes drawer JS (+1.44 kB)
AdminLayout grew from 2.71 kB to 4.15 kB due to the responsive hamburger drawer state added in Plan 11-03. The drawer logic lives in AdminLayout.vue per the D-04/D-05 sidebar-state rule.
## New Lazy Route Chunks (Plan 11-02)
Before Phase 11, 5 user routes were synchronous — they were bundled into the main JS chunk and downloaded by every visitor on first load, even users who never opened Settings or Cloud storage.
After Plan 11-02, each of these routes is a separate chunk loaded only when the user navigates to that route:
1. **SettingsView** — largest win; downloads only when user goes to `/settings`
2. **TopicsView** — downloads only when navigating to `/topics` or topic detail
3. **DocumentView** — downloads only when opening a document detail page
4. **CloudStorageView** — downloads only when user opens cloud storage
5. **CloudFolderView** — downloads only when browsing a cloud provider's folders
**Already lazy at baseline:** all auth views (LoginView, RegisterView, PasswordResetView, NewPasswordView), all admin views (AdminOverviewView, AdminUsersView, AdminQuotasView, AdminAiView, AdminAuditView), AdminLayout, SharedView.
**Kept synchronous intentionally:** FileManagerView — this is the critical first authenticated surface rendered at `/`. Lazy-loading it would delay the initial paint for logged-in users arriving via refresh-token cookie (the most common entry point). Documented in `router/index.js` per D-10.
## Interpretation
A **30.6% reduction** in the main bundle raw size (81 kB) means first-load JS for authenticated users drops from 264 kB to 183 kB. At an average mobile 4G connection (~1 Mbps effective throughput), this saves approximately **640 ms of download time** before decompression, and about **195 ms after gzip** decompression savings are factored in.
The chunk-splitting strategy is correct: the 6 new chunks are only fetched on demand, adding zero latency to the critical `/` home path.
## Artifacts
| File | Description |
|------|-------------|
| `.planning/perf/phase11-baseline.html` | Rollup visualizer HTML before any Phase 11 changes |
| `.planning/perf/phase11-baseline-summary.md` | Baseline analysis (Plan 11-01) |
| `.planning/perf/phase11-final.html` | Rollup visualizer HTML after all Phase 11 changes |
| `.planning/perf/phase11-final-summary.md` | This file |