The four-layer model of website speed
Every page request passes through four distinct layers, and a delay in any one of them looks the same to your visitor: a slow page. Diagnosing properly means measuring each layer independently rather than guessing.
- DNS resolution — translating your domain into an IP address. Should complete in under 100 ms.
- Network path — the round-trip between visitor and server. Anything over 150 ms degrades perceived speed.
- Server response (TTFB) — how long your host takes to start sending bytes. Target is under 500 ms.
- Front-end render — downloading and painting HTML, CSS, JS, images. Heavy media or render-blocking scripts dominate here.
Common server and hosting bottlenecks
If your TTFB is high but everything else is normal, the issue is your origin server. Typical causes:
- Shared hosting saturated by other tenants during peak hours
- Database queries without indexes — N+1 patterns scale catastrophically
- Missing or misconfigured caching layer (no Redis, no CDN, no HTTP cache headers)
- PHP/Node workers exhausted — every request queues
- Geographic distance from visitors with no edge cache
Run a server status check from multiple regions. Consistent slowness everywhere means origin work; only-some-regions slowness means missing CDN coverage.
Front-end issues that quietly add seconds
Even a perfectly tuned backend can feel slow if the browser has to do too much. Audit these first:
- Unoptimized images (PNG screenshots used as hero banners, no WebP/AVIF, no responsive sizes)
- Render-blocking JavaScript in the <head> — defer or async non-critical bundles
- Third-party tags (chat widgets, analytics, ads) loaded synchronously on first paint
- Custom fonts without font-display: swap, causing invisible text flash
- Layout shift from late-loading content, which the browser counts as a poor experience