TWTTotal Web TalkWebmaster forum

Performance

An Evidence-First Checklist for a Slow Website

A calm diagnostic sequence for separating network, server, database, asset, and browser bottlenecks.

A slow page is not a diagnosis. It is the visible result of work happening across DNS, TLS, application code, database queries, asset delivery, and the browser's rendering pipeline. The quickest route to a fix is to measure where the delay begins before changing caches or installing another optimization plugin.

Establish a repeatable baseline

Choose one representative URL and test it more than once from the same location. Record time to first byte, total transfer size, request count, largest contentful paint, and whether the result is from a warm or cold cache. A single speed score hides too much variation to guide a technical decision.

Compare the homepage with a plain static file on the same host. If both are slow before the first byte arrives, look at DNS, connection setup, the proxy, or the origin. If the static file is quick but the dynamic page waits, the application or database deserves attention.

Read the request waterfall

The browser network panel shows whether requests are blocked, queued, connecting, waiting on the server, or downloading. Long waiting time on the initial document points toward backend work. A fast document followed by dozens of blocking scripts, fonts, and styles points toward frontend delivery.

Sort requests by duration and size. Check for redirect chains, duplicate libraries, images much larger than their rendered dimensions, and third-party scripts that delay interaction. The largest file is not always the slowest request; connection and server wait times often matter more than transfer size.

Inspect the origin

On a dynamic site, correlate a slow request with application logs, query timings, CPU, memory, disk wait, and upstream API calls. Averages can conceal a few expensive requests, so examine percentiles and individual traces when possible. Look for changes in behavior after deployments, content imports, or traffic spikes.

Database work deserves its own measurement. Repeated queries, missing indexes, large result sets, and network calls inside loops can create delays that no browser optimization will repair. Capture the slow query and test it independently before rewriting application code.

Test caching deliberately

Confirm which layer is expected to cache the response and inspect the actual cache headers. A cache can miss because of cookies, query strings, authorization headers, short lifetimes, or a rule that bypasses dynamic pages. Compare a first request with a second and look for the cache status header rather than assuming the cache is active.

Do not cache personalized or administrative responses merely to improve a score. Correctness and privacy come first. Public HTML, versioned assets, and image variants are safer starting points.

Fix the measured constraint

Make one change, repeat the baseline test, and keep a short record of the result. Compressing an image is useful when image transfer dominates. Query tuning matters when backend wait dominates. Deferring a script matters when main-thread work blocks interaction. Matching the fix to the evidence prevents weeks of random tuning.

A good performance thread includes the before and after measurements. That makes the improvement credible and gives other webmasters a method they can adapt instead of a list of unexplained settings.