Parse and visualize Server-Timing HTTP headers, test live server latency via the Performance API, and analyze request waterfall timing. No login, client-side.
Two tools: parse Server-Timing headers from any response into a visual chart, or test live server latency for any URL using the browser Performance API.
Enter URLs to test latency using the browser's fetch + Performance API. Measures DNS lookup, TCP connection, TLS handshake, TTFB, and total time. CORS must allow the request.
How the Server-Timing HTTP header works, what to include, and how to implement it in different backends.
The Server-Timing header uses comma-separated metric definitions. Each metric has a name (required), optional description (desc), and optional duration in milliseconds (dur).
Server-Timing: cache;desc="Cache";dur=23.2,
db;desc="DB Query";dur=53.1,
render;dur=12.4
The browser exposes Server-Timing data via the Performance API. Use PerformanceServerTiming objects from resource entries:
performance
.getEntriesByType('resource')
.forEach(function(e) {
e.serverTiming.forEach(function(t) {
console.log(t.name, t.duration);
});
});
Add Server-Timing headers in your Express or Node.js response. Measure each phase using performance.now():
var start = performance.now();
// ... db query ...
var dbTime = performance.now() - start;
res.setHeader('Server-Timing',
'db;desc="Database";dur=' + dbTime.toFixed(2));
Server-Timing headers are accessible only to pages served from the same origin (or with Timing-Allow-Origin). Cross-origin requests cannot read Server-Timing metrics without the Timing-Allow-Origin: * response header. This prevents information leakage about backend infrastructure to third-party scripts.
What each phase in the browser navigation/resource timing waterfall represents and what causes slowdowns.
| Phase | Measured by | Typical fast | Slow indicator | Common causes of slowness |
|---|---|---|---|---|
| DNS Lookup | domainLookupEnd - domainLookupStart | <5ms | >50ms | Slow DNS resolver, TTL too low, no DNS preconnect |
| TCP Connect | connectEnd - connectStart | <20ms (local), <100ms (global) | >200ms | Server geographically distant, no CDN, server overloaded |
| TLS Handshake | requestStart - secureConnectionStart | <50ms | >150ms | Old TLS version, large certificates, no session reuse |
| TTFB (Time to First Byte) | responseStart - requestStart | <200ms | >600ms | Slow server processing, DB queries, no caching |
| Content Download | responseEnd - responseStart | Depends on size | Slow for small resources | Large response, slow bandwidth, no compression |
| Total Duration | duration (all phases) | <300ms | >1s | Sum of all phases above |