---
layout: post
title: "Web-Perf Wednesday 007 – Chrome Makes Busy Workers Measurable"
date: 2026-09-02 12:00:00 +0100
categories: Web Development
main: ""
meta: "Chrome 153 starts exposing dedicated-worker congestion to RUM, while browser releases tighten privacy, module recovery, and image preloading."
---
There’s been a useful amount of movement since [last
week](/2026/08/web-perf-wednesday-006-faster-browser-releases-change-your-rum-population/),
although most of it is arriving through browser releases rather than grand
announcements. Chrome has started exposing slow work inside dedicated Web
Workers, Firefox now lets failed module loads recover, and WebKit has fixed a
responsive-image preload edge case. Chrome exposes work we couldn’t see,
Firefox can retry a load it had written off, and WebKit asks for the image it
actually selected. Chrome’s worker change offers the most interesting field
data, provided we’re careful about what it actually reports.
## Chrome Makes Busy Workers Measurable
[Chrome 153 has reached Early
Stable](https://chromereleases.googleblog.com/2026/08/early-stable-update-for-desktop_0935803414.html)
for a small percentage of Windows and Mac users, ahead of its full Stable
release on 8 September. Among its performance changes, Chrome is [extending
the Long Animation Frames API to dedicated Web
Workers](https://chromestatus.com/feature/5387465121726464).
Long Animation Frames (LoAF) currently helps explain congested moments on the
main thread by combining long-running script with the rendering work that
follows it. A Worker has no rendering frame of its own, so the name becomes a
little odd here, but the practical result is useful: a long task that blocks a
dedicated Worker’s event loop can produce a `long-animation-frame` entry,
observable from inside that Worker with `PerformanceObserver` and carrying the
usual per-script attribution.
Moving work off the main thread keeps it away from rendering and input
handling, but it doesn’t make the work free. A Worker that spends too long
decoding data, filtering a large catalogue, processing an image, or running a
client-side model can still delay the result the interface is waiting for.
Main-thread INP may look perfectly respectable while the product feels slow
because the useful answer is still queued elsewhere. Worker-side LoAF gives a
[RUM strategy](/consultancy/) a browser-native signal for that missing part of
the journey.
The first implementation is deliberately narrow. It starts with dedicated
Workers and reports a single long task blocking the Worker event loop. Chrome’s
broader idea of identifying congestion caused by a flood of smaller tasks is
follow-up work. A page-level observer also won’t collect Worker entries for us;
the observer needs to run in the Worker, and the application needs to join that
evidence to the user action or task it was meant to complete.
Start with one Worker-backed journey where users already experience a delay.
Feature-detect `long-animation-frame` support inside the Worker, retain the
script attribution and duration, then add an application mark or task ID that
lets the main thread connect the result to the initiating action. Keep the
browser version and instrumentation version alongside it, because Early Stable
is a small cohort and this signal will initially be Chrome-only.
As with main-thread LoAF, collecting every entry is likely to create far more
data than insight. Sample the worst cases, set a threshold that reflects the
product interaction, and compare them with a trace before assigning blame. The
useful outcome is a view of where an asynchronous journey actually waited,
rather than a new chart whose busiest line merely happens to belong to a
Worker.
## Chrome 153 Also Removes Privacy Sandbox APIs
Chrome’s decision to retain its current approach to third-party cookies did not
preserve every API designed for a cookieless browser. Chrome 153 [removes
Related Website Sets](https://chromestatus.com/feature/5194473869017088) and
`document.requestStorageAccessFor()`, and it is also removing the [Attribution
Reporting API](https://chromestatus.com/feature/6320639375966208) alongside
other Privacy Sandbox APIs.
Teams using these features for embedded sign-in, cross-site journeys, or
conversion measurement should inventory production use now and test what the
browser does without them. The continued availability of third-party cookies
doesn’t recreate the same access or attribution model, particularly where
users, browser settings, policy, or consent already restrict those cookies.
Record the Chrome version in any measurement comparison, and make the fallback
an explicit product and privacy decision rather than an accidental return to an
older mechanism.
## Firefox Lets Failed Module Loads Recover
[Firefox 155 was released on 1
September](https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/155),
and a failed module load is no longer cached as a permanent failure. If a
network error or incorrect MIME type is corrected, importing the same specifier
again can now succeed. The change covers JavaScript, JSON, CSS, and text
modules, loaded statically or dynamically in windows and Workers.
This is a useful resilience improvement for applications that retry after a
brief CDN or deployment fault. It also means failure testing should check the
whole recovery path: restore the response, retry the import, and confirm that
the interface and telemetry recover without a reload. Firefox also adjusted
`modulepreload` behaviour around already-fetched modules and failed integrity
checks, so include preload failures in [team performance
testing](/workshops/) where modules sit on a critical route.
## WebKit Fixes Responsive-Image Preloads
[Safari Technology Preview
251](https://webkit.org/blog/18194/release-notes-for-safari-technology-preview-251/)
fixes `imagesrcset` failing to override `href` on ``. In affected builds, a responsive-image preload could fetch the
fallback URL instead of the candidate selected from `imagesrcset`, leaving the
eventual image request to choose something else. The same release also fixes
`as` keywords on preload links being matched case-sensitively.
Neither change makes every responsive preload correct: `imagesizes`, viewport,
device pixel ratio, and the eventual `` or `` selection still
need to agree. If Safari shows an unexpected early image request, a
[performance audit](/performance-audits/) should compare the preload and image
candidates before treating the wasted transfer as an application bug.
## Need Help Finding Work Your Main-Thread Metrics Miss?
If an interaction looks healthy in the usual main-thread metrics but still
finishes late, I can help trace the complete journey across Workers, network
requests, rendering, and application state. We can decide which Worker tasks
are worth measuring, join them to the actions users actually took, and keep the
result small enough for the team to interpret.
You don’t need a finished instrumentation plan to begin; an awkward trace, a
slow feature, or a result that arrives inexplicably late is plenty. If your
current RUM stops just before the interesting delay, [get in
touch](/contact/).
{% include web-perf-wednesdays.md %}