|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: "Web-Perf Wednesday 008 – Good INP Rates Keep Falling" |
| 4 | +date: 2026-09-09 12:00:00 +0100 |
| 5 | +categories: Web Development |
| 6 | +main: "" |
| 7 | +meta: "CrUX shows another fall in good INP experiences, making careful attribution more useful than a quick explanation." |
| 8 | +--- |
| 9 | + |
| 10 | +There’s been plenty of movement since last week, although the most useful news |
| 11 | +is a result without a tidy explanation. The latest Chrome UX Report (CrUX) |
| 12 | +shows another fall in the share of origins with good Interaction to Next Paint |
| 13 | +(INP), and Chrome itself says the continuing regression is cause for concern. |
| 14 | +Chrome has also refined its JavaScript Self-Profiling trial, Safari has rebuilt |
| 15 | +its module loader, and Chrome’s fortnightly releases are now live. Teams should |
| 16 | +explain their own INP before treating the wider trend as the cause. |
| 17 | + |
| 18 | +## Good INP Rates Keep Falling |
| 19 | + |
| 20 | +The [August 2026 CrUX |
| 21 | +release](https://developer.chrome.com/docs/crux/release-notes/) puts the share |
| 22 | +of origins with good INP at 85.3%, down from 85.7% in July. Good Largest |
| 23 | +Contentful Paint (LCP) fell from 68.3% to 68.1%, Cumulative Layout Shift (CLS) |
| 24 | +was effectively flat at 81.5%, and the proportion of origins passing all three |
| 25 | +Core Web Vitals edged down from 55.7% to 55.6%. |
| 26 | + |
| 27 | +The INP movement is the important one. The published good-INP figure has fallen |
| 28 | +with every monthly dataset since March, from 87.2% then to 85.3% now. Chrome’s |
| 29 | +release note calls the continued regression concerning and, usefully, says |
| 30 | +there isn’t yet a definitive reason for it. That uncertainty should set the |
| 31 | +tone for how teams read their own charts. |
| 32 | + |
| 33 | +CrUX measures a broad population; it doesn’t diagnose any one website. Its |
| 34 | +[API reports a rolling 28-day average of aggregated |
| 35 | +metrics](https://developer.chrome.com/docs/crux/api/), while the monthly |
| 36 | +BigQuery release combines eligible experiences across millions of origins. |
| 37 | +The latest dataset also contains 1.3% more origins than July. A global decline |
| 38 | +can reflect changes in sites, browsers, devices, traffic, eligibility, or some |
| 39 | +mixture of them; it doesn’t tell us which of those moved a particular product. |
| 40 | + |
| 41 | +If your own INP worsened during August, start with the evidence closest to the |
| 42 | +user. Compare route, interaction, device class, browser version, application |
| 43 | +release, tag-manager change, and consent state. Check sample and completion |
| 44 | +counts before trusting a thin segment, and compare distributions as well as |
| 45 | +the p75. A [RUM strategy](/consultancy/) should preserve enough of that context |
| 46 | +to separate a broadly shared change from a slow interaction introduced by one |
| 47 | +journey or release. |
| 48 | + |
| 49 | +CrUX and RUM also answer different questions. CrUX is valuable for confirming |
| 50 | +that eligible Chrome users experienced a problem at an origin or URL; your own |
| 51 | +instrumentation can name the interaction, route, component, and code involved. |
| 52 | +The `web-vitals` attribution build and Long Animation Frames data can help |
| 53 | +[identify slow interactions in the |
| 54 | +field](https://web.dev/articles/find-slow-interactions-in-the-field), including |
| 55 | +whether input delay, event processing, or presentation delay dominated the |
| 56 | +result and which scripts contributed. |
| 57 | + |
| 58 | +Treat the new CrUX figure as a reason to investigate, and as useful context |
| 59 | +when several sites move together. It doesn’t establish a cause. The most useful |
| 60 | +analysis will show whether your regression follows the wider pattern, where it |
| 61 | +diverges, and which evidence would change the next decision. |
| 62 | + |
| 63 | +## Chrome Can Explain Gaps Between JavaScript Stacks |
| 64 | + |
| 65 | +[Chrome 153 adds markers to the JavaScript Self-Profiling API’s origin |
| 66 | +trial](https://developer.chrome.com/release-notes/153). Each captured sample |
| 67 | +can now identify browser activity such as script, garbage collection, style, |
| 68 | +layout, or paint. That makes gaps between JavaScript stacks less mysterious: |
| 69 | +time without an application frame may still be expensive browser work. |
| 70 | + |
| 71 | +This is an experimental, opt-in signal, so it belongs in a focused |
| 72 | +[performance investigation](/performance-audits/) before it belongs on a |
| 73 | +shared KPI dashboard. Use it on an interaction whose delay is already visible, |
| 74 | +then compare the samples with a trace. The marker narrows the search; it |
| 75 | +doesn’t identify the responsible component or make a causal claim by itself. |
| 76 | + |
| 77 | +## Safari Rebuilt Its Module Loader |
| 78 | + |
| 79 | +WebKit has [rewritten Safari’s module |
| 80 | +loader](https://webkit.org/blog/18227/fixing-top-level-await-in-safari/) to fix |
| 81 | +longstanding top-level `await` ordering and initialisation errors. The old |
| 82 | +loader was a self-hosted JavaScript built-in based on an abandoned loader |
| 83 | +proposal; the replacement follows the current ECMAScript algorithms in native |
| 84 | +C++, which WebKit says also makes startup performance more stable and |
| 85 | +predictable. |
| 86 | + |
| 87 | +The implementation is available for testing in Safari Technology Preview 251 |
| 88 | +and Safari 27 beta; Safari 27 is not yet stable. Applications with async module |
| 89 | +graphs should test repeated dynamic imports, failed loads, and dependency |
| 90 | +ordering now. The main benefit is correctness, while removing runtime |
| 91 | +compilation from a cold module path is a worthwhile performance detail to watch |
| 92 | +in representative journeys. |
| 93 | + |
| 94 | +## Chrome’s Two-Week Cycle Is Now Live |
| 95 | + |
| 96 | +The release change covered in [edition |
| 97 | +006](/2026/08/web-perf-wednesday-006-faster-browser-releases-change-your-rum-population/) |
| 98 | +has now taken effect. [Chrome 153 began rolling out on 8 |
| 99 | +September](https://developer.chrome.com/blog/chrome-two-week-start), starting |
| 100 | +Chrome’s two-week Stable cycle on desktop, Android, and iOS; Chrome 154 is |
| 101 | +already in Beta and is scheduled for Stable on 22 September. |
| 102 | + |
| 103 | +Teams now need to operationalise the release annotations, Beta checks, and |
| 104 | +browser-version segments they planned. Confirm that dashboards can distinguish |
| 105 | +regular and Extended Stable populations, and give the [team testing the real |
| 106 | +journeys](/workshops/) enough lead time to find instrumentation changes before |
| 107 | +each Stable rollout reaches field data. |
| 108 | + |
| 109 | +## Need Help Explaining an INP Regression? |
| 110 | + |
| 111 | +If INP has moved and the obvious explanations don’t survive contact with the |
| 112 | +data, I can help connect CrUX, RUM, traces, releases, and third-party changes |
| 113 | +into one investigation. We can identify the interactions and populations that |
| 114 | +actually changed, add the attribution your current instrumentation is missing, |
| 115 | +and decide whether the result needs an engineering fix, a measurement fix, or |
| 116 | +more evidence. |
| 117 | + |
| 118 | +You don’t need to arrive with a complete diagnosis. A CrUX dip, an awkward RUM |
| 119 | +distribution, or a trace that doesn’t quite explain the user’s wait is enough |
| 120 | +to begin. If you’d like a second pair of eyes on it, [get in touch](/contact/). |
| 121 | + |
| 122 | +{% include web-perf-wednesdays.md %} |
0 commit comments