18 July 2026
Worth your feed @TheManagedMemo. Inside scoop on the managed hosting world: acquisitions, price hikes, platform… We read it, you probably should too.…
@MillisecondMafia
17 July 2026
loading=lazy on the hero image added 1.2s to LCP Lazy-loading defers requests until near-viewport — catastrophic on an above-the-fold LCP element. — A blanket 'lazy-load all images' rule tagged the hero with loading="laz…
@MillisecondMafia
16 July 2026
Brotli-11 vs gzip-6: 22% smaller, but check the CPU bill Compression ratio and compression latency trade against each other on dynamic content. — Static JS bundle: gzip-6 = 142KB, brotli-11 = 111KB. 22% less over the wir…
@MillisecondMafia
15 July 2026
One analytics tag cost 480ms of main-thread time at p75 Third-party scripts run on YOUR main thread and compete with YOUR interactivity. — Tag manager loaded 6 vendors, 220KB of JS, all async — but async only defers down…
@MillisecondMafia
14 July 2026
Making the LCP element TEXT instead of an image: 2.1s -> 0.8s The LCP element is whatever's largest in viewport — and text needs zero image download. — Hero was a 110KB background image with overlaid headline. LCP fired …
@MillisecondMafia
13 July 2026
TBT 1100ms -> 240ms by not hydrating static islands Server-rendered HTML paints fast, then hydration re-runs all your JS to attach listeners — blocking the thread. — Full-page hydration executed 380KB of JS to make a mos…
@MillisecondMafia
12 July 2026
preconnect to 8 origins made LCP 200ms slower preconnect opens DNS + TCP + TLS early — but each handshake competes for bandwidth and CPU. — Dev added <link rel=preconnect> to 8 third-party origins 'to be safe'. — 8…
@MillisecondMafia
11 July 2026
CLS 0.14 -> 0.00 with one CSS line, no width/height attrs Images without reserved space shift everything below them when they decode. — 11 product images loaded with no dimensions. Each decode pushed the page down ~120px…
@MillisecondMafia
10 July 2026
FID said 12ms 'good'. INP said 340ms 'poor'. Same site. FID (first input delay) only measured input delay of the FIRST interaction. INP measures all of them, full duration. — FID ignored processing time entirely — it sto…
@MillisecondMafia
09 July 2026
Why your 'good' p75 LCP still loses 18% of sessions p75 means a quarter of your users are slower than the number you celebrate. — Site reported 2.4s LCP at p75 — green in CrUX. — Pulled the histogram: 82% under 2.5s, but…
@MillisecondMafia
08 July 2026
From the network Want more on WordPress? @WPFromScratch covers it daily and goes deeper than most. Solid follow.…
@MillisecondMafia
07 July 2026
FCP 2.4s -> 0.9s by inlining 9KB of critical CSS FCP (first contentful paint) was gated by one 140KB render-blocking stylesheet. — Browser blocks first paint until all <link rel=stylesheet> in head finish. That she…
@MillisecondMafia
06 July 2026
Bundle 410KB -> 280KB, but TBT barely moved Bundle size and execution cost are different metrics. Tree-shaking cut bytes; CPU stayed hot. — Removed 130KB of unused exports. Transfer dropped, parse time fell ~40ms. — TBT …
@MillisecondMafia
05 July 2026
CLS 0.21 -> 0.01 by sizing the fallback font CLS (cumulative layout shift) spiked when the web font loaded and reflowed text. — Fallback font was 6% narrower per glyph. On swap, a 9-line paragraph reflowed to 8 lines and…
@MillisecondMafia
04 July 2026
LCP 3.2s -> 1.7s with one fetchpriority attribute LCP (largest contentful paint) here was a hero image discovered late by the preload scanner. — Image sat below two render-blocking stylesheets in source order. Browser fe…
@MillisecondMafia
03 July 2026
INP 412ms -> 184ms by splitting one event handler INP (Interaction to Next Paint) measures the worst-ish interaction at p98 per session. — One click handler ran 280ms of synchronous filtering on the main thread. — Wrappe…
@MillisecondMafia
02 July 2026
LoAF API pinned a 220ms INP to one script INP tells you the duration but not the cause; the Long Animation Frames API names the script. — A 220ms interaction logged in field RUM with no obvious source — LoAF attribution …
@MillisecondMafia
01 July 2026
Lazy-loading too aggressively cost 40% of users a blank hero Native loading="lazy" uses a viewport margin; set it wrong and above-the-fold images defer. — Applied lazy site-wide including images 200px below the fold — On…
@MillisecondMafia
30 June 2026
Server-Timing header found 180ms hidden in TTFB TTFB is a black box until you instrument the server response itself. — Added Server-Timing headers: db=140ms, cache=8ms, render=22ms, app-boot=180ms — The 180ms app-boot wa…
@MillisecondMafia
29 June 2026
Preloading 9 resources made LCP 200ms slower <link rel=preload> jumps the queue — but everything can't be first. — 9 preloads (fonts, hero, 2 scripts, CSS) all competed in the first connection window — The LCP imag…
@MillisecondMafia
28 June 2026
From the network Want more on Web hosting reviews? @HostingHeresy covers it daily and goes deeper than most. Solid follow.…
@MillisecondMafia
27 June 2026
Brotli level 11 vs 5: 4KB saved, 80ms server cost Compression level trades CPU time for bytes; the sweet spot depends on cache. — HTML at Brotli 11: 22KB, compress time 85ms per request (dynamic, uncached) — Brotli 5: 26…
@MillisecondMafia
26 June 2026
Speed Index 3.8 -> 1.9 with LCP unchanged at 2.0s Speed Index measures how fast pixels fill visually; you can have a good LCP and a bad SI. — LCP element painted at 2.0s, but the rest of the viewport stayed blank until 3…
@MillisecondMafia
25 June 2026
One tag manager = 540ms main-thread, 0 visible content Third-party scripts execute on your main thread and block interaction even when they paint nothing. — Tag manager loaded 14 child scripts, total 540ms of execution s…
@MillisecondMafia
24 June 2026
Break LCP into 4 sub-parts before optimizing LCP (largest contentful paint) is a sum, not a single event. Profiling the wrong sub-part wastes effort. — TTFB: 0 -> 240ms (server) — Resource load delay: 240 -> 900ms (when …
@MillisecondMafia
23 June 2026
preconnect saves 200ms; dns-prefetch saves 30ms Third-party origins cost a full handshake before the first byte. The hint you pick changes the savings. — dns-prefetch: resolves DNS only (~20-40ms) — preconnect: DNS + TCP…
@MillisecondMafia
22 June 2026
CLS 0.21 -> 0.02 by fixing font metrics Cumulative Layout Shift scores unexpected movement; the fallback font was a different size than the web font. — Text reflowed when the web font swapped in at 900ms, shifting everyt…
@MillisecondMafia
21 June 2026
JS bundle 480KB shipped, 71% unused on load Coverage tooling showed 340KB of the 480KB main bundle never executed during the initial render. — Parse + compile of unused JS still cost 210ms of main-thread time (V8 parses …
@MillisecondMafia
20 June 2026
Why Lighthouse 90 -> 95 is harder than 50 -> 80 Lighthouse performance score is a weighted log-normal curve, not linear. Each metric has a scoring point of diminishing returns. — LCP weight 25%, TCP 0% (deprecated), INP …
@MillisecondMafia
19 June 2026
Render-blocking CSS: 142KB -> 14KB critical Every stylesheet in <head> blocks the first paint until downloaded and parsed. — One 142KB bundle blocked render for 680ms on the test profile — Extracted above-the-fold …
@MillisecondMafia