← Workflows

阅读中文版本

Web Performance Audit and Fix Workflow

Audit Core Web Vitals from field data first, attribute each failing metric to its cause, fix by impact rank, and verify in both lab and field.

intermediate~35 minperformance-tuningweb-vitalsfrontend

Objective

Improve real-user Core Web Vitals by auditing field data, ranking fixes by population impact, and verifying improvements where users actually are.

Environment

  • Field data: RUM or Chrome UX Report for the property
  • Lab tooling: Lighthouse CI and DevTools performance traces
  • Ability to deploy and measure on production traffic

Steps

1. Start from field data, not lab scores

Pull p75 Core Web Vitals from real users segmented by device class and route, identifying which populations experience which failures.

Expected state: A field-data table exists naming the failing metrics per real-user segment.

2. Attribute each failing metric

For the worst segment-metric pairs, capture traces and attribute the metric to its cause: LCP to late resources, CLS to layout shifts, INP to long tasks.

Expected state: Every failing metric has a named cause with trace evidence.

3. Rank fixes by population impact

Score candidate fixes by affected-user percentage times metric improvement, fixing the product of reach and severity rather than the loudest complaint.

Expected state: A ranked fix list exists where the top item moves the most user-milliseconds.

4. Fix with lab verification per change

Implement top fixes individually, verifying each in the lab (trace shows the cause resolved) before moving to the next.

Expected state: Each fix lands with before-and-after lab traces for its specific cause.

5. Verify in field and re-baseline

After deployment, watch the field p75 for the affected segments over the following days, confirming the improvement survived real conditions.

Expected state: Field data confirms the lab prediction within the expected window.

Expected outcome

Core Web Vitals improvements driven by real-user data, each fix attributable and verified in both lab and field, with priorities ranked by population impact.

Verification

Field p75 for target segments improved and held over a week; each shipped fix has a trace pair showing cause removal.

Field data first, lab as the microscope

Lab scores optimize the simulator; field data describes the users. Audit from RUM p75 segmented by device and route, use the lab to attribute causes, and verify fixes back in the field where the metric actually lives.

field (RUM p75, 28d):
           LCP    CLS    INP
  mobile   3.9s   0.18   410ms   <- failing
  desktop  2.2s   0.04   180ms

attribution (mobile /product/*, 62% of traffic):
  LCP 3.9s: hero image late-discovered (no preload)
  CLS 0.18: reviews widget pushes layout 210px
  INP 410ms: filter tap handler 300ms (main thread)

rank (users x improvement):
  1 preload + fetchpriority hero    est. 1.1s LCP
  2 reserve reviews slot (aspect)  est. 0.14 CLS
  3 move filter to worker          est. 220ms INP

after (field p75, +7d): LCP 2.4s, CLS 0.04, INP 190ms

Segments find the failures averages hide

An aggregate LCP of 2.8 seconds can mean everyone at 2.8 or a mobile population at 3.9 masked by desktop at 2.2. Segmenting by device, route, and connection class identifies exactly which real users experience the failure, which is both the priority signal and the verification target.

One fix, one trace, one field check

Bundling five optimizations into a deploy teaches nothing when the metric moves: which fix contributed? Landing fixes individually with a lab trace per cause, then watching the field response, builds a causal library that makes the next audit dramatically faster.