Performance Architecture
(Designing frontend systems that are fast by default, not by heroics)
Architect rule:
Performance is not an optimization task.
Performance is a design constraint.
Chapter 1 — Why Performance Is an Architectural Concern
1.1 The Performance Myth
Most teams believe:
-
“We’ll optimize when it’s slow”
-
“We can lazy-load later”
-
“Performance is a frontend dev problem”
This is false.
By the time performance is “noticed”:
-
architectural decisions are locked in
-
dependencies are entrenched
-
costs are exponential
Architect insight:
Performance debt compounds faster than code debt.
1.2 Performance Is User Experience
Frontend architects understand that:
-
speed = trust
-
responsiveness = perceived quality
-
jank = broken product (even if logic is correct)
Users don’t care why it’s slow.
They only experience that it is slow.
Chapter 2 — Performance Signals (What Architects Measure)
2.1 Architects Don’t Guess — They Measure
Architects choose signals, not vibes.
Key signals include:
-
load speed
-
input responsiveness
-
visual stability
-
error rates under load
These signals guide architecture decisions.
2.2 System vs Component Metrics
Level
Example
Architect Focus
Component
render time
Local tuning
Page
load & interaction
Route design
System
trends over time
Architecture health
Architects care most about system-level trends.
Chapter 3 — Performance Budgets (Non-Negotiable)
3.1 What a Performance Budget Is
A performance budget defines:
-
how much JS you can ship
-
how much work can happen on load
-
how much latency is acceptable
It turns performance from:
“Nice to have”
into
“Design requirement”
3.2 Example Budget (Architect-Owned)
# Frontend Performance Budget
## Load
- LCP ≤ 2.5s
- Initial JS ≤ 170KB (gzipped)
## Interactivity
- INP ≤ 200ms
- Hydration ≤ 1s
## Stability
- CLS ≤ 0.1
Architects own this document, not individual devs.
3.3 Budget Violations Are Architectural Signals
When budgets break, architects ask:
-
Which decision caused this?
-
Was it avoidable?
-
Is the feature worth the cost?
This reframes performance as trade-offs, not blame.
Chapter 4 — The Main Thread Is Sacred
4.1 Why the Main Thread Matters
Everything users feel goes through:
- the main thread
If it’s blocked:
-
clicks lag
-
animations stutter
-
trust erodes
Architect rule:
Protect the main thread above all else.
4.2 What Consumes the Main Thread
Architects track:
-
hydration
-
state reconciliation
-
large renders
-
third-party scripts
-
heavy computations
They design to:
-
reduce work
-
defer work
-
move work off-thread
4.3 Hydration as a Performance Cost
Hydration is:
-
JS execution
-
reconciliation
-
event binding
Architects:
-
minimize hydrated surface
-
delay non-critical hydration
-
isolate interactive islands
This is architectural, not micro-optimization.
Chapter 5 — Rendering Strategy as Performance Design
5.1 Rendering Choices = Performance Choices
Each rendering model impacts performance differently:
Model
Performance Impact
CSR
Heavy JS, delayed paint
SSR
Faster LCP, hydration cost
Streaming
Better perceived speed
Partial hydration
Lower main-thread load
Architects select per route, not globally.
5.2 Above-the-Fold as an Architectural Boundary
Architects define:
-
what must render immediately
-
what can wait
-
what can stream later
This boundary informs:
-
component placement
-
data fetching
-
bundle splitting
Chapter 6 — Data Fetching & Performance
6.1 Network Is Part of Performance Architecture
Architects design:
-
request concurrency
-
request consolidation
-
data preloading
They avoid:
-
waterfalls
-
over-fetching
-
duplicate requests
6.2 Caching Strategy Impacts Speed More Than Code
Architects decide:
-
cache location
-
cache lifetime
-
revalidation triggers
Bad caching decisions:
-
negate SSR
-
increase network chatter
-
cause stale UX
Chapter 7 — Third-Party Scripts (The Silent Killer)
7.1 Why Third Parties Are Dangerous
Third-party scripts:
-
block the main thread
-
add unpredictable work
-
bypass your standards
Architects treat them as:
Untrusted code in production
7.2 Architect Rules for Third-Party Code
-
Must justify performance cost
-
Must be deferred or isolated
-
Must be monitored continuously
If it can’t be measured, it can’t be approved.
Chapter 8 — Performance Regression Control
8.1 Performance Must Fail the Build
Architects introduce:
-
CI performance checks
-
bundle size alerts
-
regression thresholds
If performance degrades:
-
the pipeline fails
-
discussion happens early
8.2 Trend Monitoring Over Snapshots
One-time audits lie.
Architects monitor:
-
trends over time
-
release-to-release changes
-
user-segment impact
Performance architecture is ongoing, not episodic.
Chapter 9 — Performance Anti-Patterns Architects Eliminate
🚫 “We’ll optimize later”
🚫 Global hydration everywhere
🚫 Unbounded bundle growth
🚫 Blind third-party adoption
🚫 No performance ownership
Each is a system failure, not a dev mistake.
Chapter 10 — Exercises (Mandatory)
Exercise 1 — Budget Definition
Create performance budgets for:
-
marketing pages
-
dashboard
-
admin area
Explain why they differ.
Exercise 2 — Main Thread Audit
List all main-thread work on first load.
Classify:
-
critical
-
deferrable
-
removable
Architects delete work aggressively.
Exercise 3 — Regression Plan
Design:
-
how performance is measured
-
when alerts fire
-
who decides trade-offs
Without this, budgets are fiction.
Chapter 11 — Part VI Summary
After Part VI, you should:
-
Treat performance as a design constraint
-
Own performance budgets
-
Protect the main thread intentionally
-
Design rendering and data flow for speed
-
Catch regressions before users do
If Part V taught you how systems scale