Time to first byte is not page speed

A 90ms server response feels irrelevant when the page then loads 2MB of images, four font files and a chat widget. Measure what the visitor waits for, not what the server reports.

The usual culprits, in order

From the worst offenders down:

  • Uncompressed hero images
  • Render-blocking CSS and fonts
  • Third-party scripts loaded synchronously
  • No caching headers on static assets

Fix the cheap things first

Convert images to WebP, add width and height attributes to stop layout shift, defer non-critical JavaScript, and set a long cache lifetime on anything with a versioned filename. That sequence usually halves load time before any server tuning.