#17230·lighthouse

PSI/Lightrider: observedFirstPaint 1.1–2.2 s after the frame is on the filmstrip; reproducible on Shopify storefronts

Author: Naveed-756Created Sep 10, 2026Updated Sep 12, 2026
Labelsbug

FAQ

URL

https://resinrock.com/

What happened?

On PageSpeed Insights (Lightrider), Shopify storefront pages intermittently report observedFirstPaint and observedFirstContentfulPaint 1.1 s or 2.2 s after the HTML has finished, while the screenshot filmstrip already shows the painted page at ~0.25 s (observedFirstVisualChange ≈ 0.25 s). The main thread is idle during the gap. Because Lantern includes every request that completed before the observed FCP, the simulated FCP/LCP of an affected run balloon (FCP 2.1 s → 3.9–4.8 s, LCP 3.1 s → 6.7–8.7 s) and the score drops from 91–95 to 61–68 for the same page.

Reproduction (mobile, pagespeed.web.dev or the PSI API; add a changing ?r= to avoid cached reports)

Other Shopify stores show the same pattern (tested: allbirds.com, gymshark.com, fashionnova.com).

What did you expect?

observedFirstPaint / observedFirstContentfulPaint to match the frame that is visible on the screenshot filmstrip (~0.25 s after the document arrives), on every run. Or, if the paint event is legitimately late because of a presentation-side delay on the Lightrider host, Lantern's FCP/LCP graphs should not absorb the unrelated requests that happen to complete during that delay.

Same page, one minute apart, cache-busted, on Google's fleet: score 97 / 77 / 69 / 96 / 94. The only difference between the runs is whether the first frame was presented at ~0.1 s or at 1.1–2.2 s after the HTML ended.

What have you tried?

  • Two-page bisect on the same fleet: page A (theme CSS + fonts + content, no Shopify content_for_header) painted 99–223 ms after the HTML ended in 15/15 runs, score 99 every time. Page B (identical plus Shopify's head) was held on ~40 % of runs (6/15, 5/8, 2/5 across batches). The hold is stable at 1.1 s or 2.2 s, never in between.
  • Checked the JSON of held runs: observedFirstVisualChange ≈ 250 ms while observedFirstPaint = observedFirstContentfulPaint = 1330–2200 ms; observedDomContentLoaded and observedLoad fall inside the gap; main-thread-tasks shows no task over ~60 ms in the gap; long-tasks is empty; every render-blocking resource finishes by ~300 ms.
  • Ruled out page-side causes on the same fleet: blocking the shop.app cart-sync iframe via CSP (still held), blocking every iframe with frame-src 'none' (3/14 held vs 6/15 control, reduced but not removed), painting the first element before any body-level stylesheet (no change), starting all theme scripts only after the first frame (no change).
  • Ran the same pages locally with Lighthouse CLI 13.4.1 (headless and headed Chrome 152, Windows) many times: the gap never occurs; first paint tracks the filmstrip.
  • Ran other Shopify stores (allbirds.com, gymshark.com, fashionnova.com) on PSI: same bimodal observedFirstPaint.
  • Reported to Shopify as well: https://community.shopify.com/t/storefront-head-code-delays-chromes-first-frame-by-1-2-s-on-googles-pagespeed-machines-reproducible-two-page-test/679801

How were you running Lighthouse?

PageSpeed Insights

Lighthouse Version

13.4.1 (PSI). Local comparison runs: CLI 13.4.1.

Chrome Version

PSI reports HeadlessChromium 151.0.7922.71 "with lr". Local comparison runs: Chrome 152 stable, headless and headed.

Node Version

24.14.0 (local CLI comparison runs only)

OS

PSI (Lightrider). Local comparison runs: Windows 11.

Relevant log output

bash
Page B, five cache-busted PSI mobile runs, 10 Sept 2026 (times relative to the end of the HTML response):
run 1  observedFirstPaint +111 ms   score 97
run 2  observedFirstPaint +1149 ms  score 77   (observedFirstVisualChange +250 ms)
run 3  observedFirstPaint +2196 ms  score 69   (observedFirstVisualChange +250 ms)
run 4  observedFirstPaint +119 ms   score 96
run 5  observedFirstPaint +106 ms   score 94

Page A, same batch:
runs 1-5  observedFirstPaint +134 / +223 / +184 / +139 / +99 ms   score 99 x5

Held run example (page B): theme.css done +84 ms, checkout CSS done +298 ms, fonts done +278 ms,
DOMContentLoaded +887 ms, load +986 ms, observedFirstPaint +1333 ms, no main-thread task > 62 ms in the gap.