v151 · Performance · Resource Timing
Router Timing Dashboard
Fetch a batch of resources and inspect every PerformanceResourceTiming entry for the two new Chrome 151 fields: workerMatchedRouterSource (which Static Router rule was matched) and workerFinalRouterSource (what actually served the response). The table shows both fields alongside classic timing metrics.
Checking PerformanceResourceTiming support…
workerMatchedRouterSource
workerFinalRouterSource
duration (ms)
url
matchedRouterSource
finalRouterSource
duration (ms)
Click "Fetch batch" to populate
Entry detail
about the new fields
workerMatchedRouterSource— the source declared by the matched Static Router rule:"cache","network","fetch-event","race-network-and-fetch-handler", or""(no rule matched)workerFinalRouterSource— what actually delivered the bytes. May differ from the matched source if the primary source was unavailable (e.g. cache miss → network fallthrough)- Both fields are empty strings when no service worker handled the request
code
// Observe all resource timings on the page
performance.getEntriesByType('resource').forEach(entry => {
// Chrome 151: new fields
const matched = entry.workerMatchedRouterSource; // "" if no SW rule
const final = entry.workerFinalRouterSource; // "" if no SW
console.log({
url: entry.name,
matched, // which Static Router rule source was selected
final, // what actually served the response
duration: entry.duration.toFixed(1) + 'ms',
});
});
// Use PerformanceObserver to capture in real time
const obs = new PerformanceObserver(list => {
for (const entry of list.getEntries()) {
if (entry.workerMatchedRouterSource) {
console.log('SW router hit:', entry.workerMatchedRouterSource);
}
}
});
obs.observe({ type: 'resource', buffered: true });
see also
implementation reference
Need the exact API surface, compatibility boundaries, errors, lifecycle, and source links? Read the matching gendn reference ↗