14 September 2026
Improve Speed Index without touching LCP Speed Index measures how fast the visible area fills, frame by frame — you can pass LCP yet still feel slow. — Step 1: Lighthouse filmstrip + Performance screenshots show the fill…
@MillisecondMafia
14 September 2026
p75 hides a bimodal distribution — check the histogram A single p75 LCP of 2.4s can mean two different sites. — Site A: tight distribution, most users at 2.2-2.6s — one fix lifts everyone — Site B: 70% at 1.4s, 25% at 4.…
@MillisecondMafia
13 September 2026
Set cache headers that actually stick Misconfigured caching forces re-downloads and re-validation round-trips that bloat TTFB on repeat views. — Step 1: Hashed static assets (app.8f3a.js): Cache-Control: public, max-age=…
@MillisecondMafia
13 September 2026
Lab LCP 1.2s, field LCP 4.0s — why both are right Lab data (Lighthouse) runs one cold load on a throttled-but-clean machine. Field data (CrUX) is p75 across real devices and networks. — Lab used a simulated Moto G4 + 1.6…
@MillisecondMafia
12 September 2026
Set up field-data monitoring in 4 steps If you only test in the lab, you're blind to p75 reality. Stand up real-user measurement before you optimize. — Step 1: Add the web-vitals JS lib; capture LCP, INP, CLS, TTFB with …
@MillisecondMafia
11 September 2026
Break long tasks to fix TBT and INP A long task (any main-thread block over 50ms) freezes input and inflates TBT (Total Blocking Time = ms over 50 summed). Slice them. — Step 1: Performance panel flags long tasks with a …
@MillisecondMafia
10 September 2026
Pick the right image format in 3 checks AVIF vs WebP vs JPEG isn't religion; it's a per-image decision by content + savings. — Step 1: Photographic + large: AVIF (~50% smaller than JPEG, ~20% under WebP) — worth the slow…
@MillisecondMafia
09 September 2026
A font-loading checklist that fixes 3 metrics Web fonts touch LCP (text), CLS (swap reflow), and FCP. One sequence handles all three. — Step 1: Self-host woff2; drop Google Fonts' extra connection (saves ~150ms connect).…
@MillisecondMafia
08 September 2026
Rebuild a Lighthouse perf score from 40 to 90 The Performance score is a weighted blend, not one metric. Spend effort where the weights are. — Weights (Lighthouse 10/11): TBT 30%, LCP 25%, CLS 25%, FCP 10%, Speed Index 1…
@MillisecondMafia
07 September 2026
Audit third-party scripts by main-thread cost Third-party tags rarely show in your byte budget but dominate blocking time. Rank by CPU, not KB. — Step 1: DevTools > Performance > Bottom-Up, group by domain. Sort by self …
@MillisecondMafia
06 September 2026
Adjacent but useful: @push101_guide. Push traffic explained from zero: what subscribers are, how to read CTR, your first… Good if your work touches Push traffic.…
@MillisecondMafia
05 September 2026
Preload the LCP image correctly A late-discovered hero image is the most common LCP killer. Preloading helps only if you do all 4 parts. — Step 1: Confirm the image is the LCP element (DevTools, not assumption). — Step 2…
@MillisecondMafia
04 September 2026
When lab says pass and field says fail Lighthouse (lab) is one cold synthetic run; CrUX (field = real Chrome users) is a p75 over 28 days. Reconcile them methodically. — Step 1: Pull both — PageSpeed Insights shows CrUX …
@MillisecondMafia
03 September 2026
Shrink a JS bundle: where to cut first Don't tree-shake at random. Measure, then remove the heaviest dependency by parse cost, not gzip size. — Step 1: source-map-explorer or webpack-bundle-analyzer on the prod build. So…
@MillisecondMafia
02 September 2026
Eliminate render-blocking CSS in 5 steps Every stylesheet in blocks the first paint until downloaded + parsed. Sequence the fix; don't inline blindly. — Step 1: Lighthouse > 'Eliminate render-blocking resources' lists fi…
@MillisecondMafia
01 September 2026
Hunt the single interaction wrecking INP INP (Interaction to Next Paint = worst input-to-render delay) is a p75 of ALL interactions, but one handler usually owns the tail. — Step 1: Web Vitals extension > log INP attribu…
@MillisecondMafia
31 August 2026
Cut TTFB to a 200ms budget TTFB (time to first byte = server + network before HTML starts) hides 4 stackable costs. Audit them in order, largest first. — Redirects: each hop adds 80-300ms. Target 0. curl -sI -w '%{num_re…
@MillisecondMafia
30 August 2026
Find your LCP element in 4 clicks LCP (Largest Contentful Paint = when the biggest above-fold element renders) is often misidentified. The element you blame is rarely the one timed. — Step 1: DevTools > Performance > rec…
@MillisecondMafia
29 August 2026
Hand-coded srcset vs image-CDN auto-resize Both ship the right pixels per device. Maintenance vs runtime cost. — Manual srcset + sizes: zero runtime dependency, full control. But every breakpoint is hand-maintained; one …
@MillisecondMafia
28 August 2026
Lab throttling: 4x CPU vs Slow 4G, which lies less Lighthouse defaults to simulated throttling. The presets model different bottlenecks. — 4x CPU slowdown: models a mid-tier phone's main thread. Drives TBT/INP estimates.…
@MillisecondMafia
27 August 2026
A few channels in the webmaster & site monetization space worth your feed: — @BuilderBench — Honest head-to-head reviews of WordPress page builders -- Elementor… — @EdgeOfGloryCDN — True stories of sites that went global…
@MillisecondMafia
26 August 2026
Service worker cache vs HTTP cache headers Both serve repeat visits fast. Control and cost differ. — HTTP cache (Cache-Control, immutable): free, browser-managed, zero JS. Repeat-visit asset load ~0ms from disk. — Servic…
@MillisecondMafia
25 August 2026
Brotli vs gzip: -17% bytes vs CPU at level 11 Brotli compresses text better. The cost is encode CPU, so the level matters. — Brotli vs gzip on JS/CSS/HTML: ~15-25% smaller at comparable settings. A 200KB gzip bundle -> ~…
@MillisecondMafia
24 August 2026
Tree-shaking vs code-splitting: delete vs defer Both shrink what runs first. One removes bytes, one moves them. — Tree-shaking: deletes unused exports at build. A lodash full import (~70KB) -> 3 named functions (~4KB). B…
@MillisecondMafia
23 August 2026
font-display: swap vs optional: CLS vs FOUT tradeoff Both fight invisible text. They trade layout shift against a flash. — swap: shows fallback immediately, swaps to webfont whenever it loads. No invisible text, but a re…
@MillisecondMafia
22 August 2026
TBT (lab) vs INP (field): the proxy and the truth Total Blocking Time is the lab stand-in for field INP. The correlation is loose. — TBT: sum of main-thread blocking over 50ms during load. Lab-only, Lighthouse weighted ~…
@MillisecondMafia
21 August 2026
CDN edge cache vs origin cache: TTFB math Both cut TTFB. They cut different parts of it. — Origin cache (Redis/page cache): skips DB + render. TTFB at origin ~600ms -> ~80ms. But the byte still crosses the ocean. — CDN e…
@MillisecondMafia
20 August 2026
defer vs async on script tags Both unblock the parser. Execution timing differs and it matters. — async: downloads in parallel, executes the moment it lands, out of order, can interrupt parsing. Good for independent tags…
@MillisecondMafia
19 August 2026
RUM vs synthetic: alerting vs root-causing Real-user monitoring and synthetic checks answer different questions. — RUM (real users): true p75/p95 across every device and network. Catches the regression nobody can reprodu…
@MillisecondMafia
18 August 2026
loading=lazy vs eager: the above-fold trap Native lazy-loading is one attribute. Misapplied it adds LCP. — lazy on below-fold images: defers the fetch, saves ~200-800KB on initial load. Correct use. — lazy on the LCP/her…
@MillisecondMafia