Web Performance Optimization: Your Slow Website Is Costing You $100K/Year
Amazon found that every 100ms of latency cost them 1% in sales. You're not Amazon — which means the impact on your business is even worse. Here's how to fix it.
The Real Cost of a Slow Website
Page speed isn't a vanity metric. It's a revenue driver. Research consistently shows:
- 7% conversion loss per 1-second delay (Akamai, 2023)
- 53% of mobile users abandon sites loading over 3 seconds (Google)
- Core Web Vitals are now a Google ranking factor — slow sites rank lower in search
- $2.6 billion in revenue lost annually to slow retail sites (Deloitte)
For a business doing $1.5M/year in web-sourced revenue, a 1-second improvement in page load could be worth $105K/year in recovered conversions.
Core Web Vitals: What Google Actually Measures
| Metric | What It Measures | Good | Poor |
|---|---|---|---|
| LCP (Largest Contentful Paint) | Loading speed — when the main content is visible | < 2.5s | > 4.0s |
| INP (Interaction to Next Paint) | Responsiveness — how fast the page responds to clicks | < 200ms | > 500ms |
| CLS (Cumulative Layout Shift) | Visual stability — how much the layout jumps | < 0.1 | > 0.25 |
Image Optimization (Usually the #1 Win)
Images typically account for 50-80% of total page weight. Fix images first:
- Use modern formats: WebP is 25-35% smaller than JPEG at equivalent quality. AVIF is even better but browser support is still catching up.
- Responsive images: Use
srcsetandsizesattributes. Don't serve a 2000px hero image to a 375px phone screen. - Lazy loading: Add
loading="lazy"to images below the fold. Don't lazy-load the hero image — that's your LCP element. - Compression: JPEG quality 80-85 is visually indistinguishable from 100 but 40-60% smaller. Use tools like Sharp, Squoosh, or ImageOptim.
- Proper dimensions: Always set
widthandheightattributes to prevent CLS. The browser reserves space before the image loads.
JavaScript: The Silent Performance Killer
JavaScript is the most expensive resource on the web — it has to be downloaded, parsed, compiled, AND executed. Here's how to tame it:
- Audit your bundle: Use
source-map-explorerorwebpack-bundle-analyzer. You'll find libraries you imported for one utility function that ship 300KB of code. - Code split aggressively: Route-based splitting at minimum. Component-level splitting for heavy features (charts, editors, maps).
- Defer non-critical JS: Analytics, chat widgets, social share buttons — load
these after the main content renders. Use
asyncordeferattributes. - Tree shake: Modern bundlers eliminate dead code — but only if you import
correctly.
import { debounce } from 'lodash-es'is 100x smaller thanimport _ from 'lodash'. - Remove unused polyfills: If you don't need to support IE11 (you don't in 2026), drop babel polyfills. They often add 50-100KB.
Server & CDN Strategy
- CDN for static assets: CloudFront, Cloudflare, or Fastly. A CDN alone can reduce TTFB by 50-80% for geographically distributed users.
- Edge caching: Cache HTML pages at the edge for content that doesn't change frequently. Even 60-second TTLs help enormously.
- HTTP/2 or HTTP/3: Multiplexed connections, header compression, and server push. If you're still on HTTP/1.1, you're leaving performance on the table.
- Preconnect and prefetch: Use
rel="preconnect"for third-party origins (fonts, analytics). Userel="prefetch"for resources the user is likely to need next. - Compression: Enable gzip or brotli compression on your server. Brotli is 15-20% smaller than gzip for text assets.
Font Loading Strategy
Custom fonts are one of the most common causes of CLS and slow LCP:
- Use
font-display: swapto show text immediately with a fallback font while the custom font loads. - Preload critical fonts:
<link rel="preload" href="font.woff2" as="font" crossorigin> - Subset your fonts: If you only use Latin characters, don't load the full Unicode range. This can reduce font size by 50-80%.
- Limit font variations: Each weight and style is a separate file. Use at most 3-4 variations.
The 90+ Lighthouse Score Checklist
- ☐ Images compressed and in WebP format
- ☐ All images have explicit width/height
- ☐ Hero image preloaded, below-fold images lazy-loaded
- ☐ JavaScript bundle under 200KB gzipped
- ☐ Non-critical JS deferred or async
- ☐ CSS critical path inlined, rest deferred
- ☐ Fonts preloaded with font-display: swap
- ☐ CDN serving static assets
- ☐ Brotli compression enabled
- ☐ TTFB under 200ms
- ☐ No layout shifts from dynamic content
- ☐ Third-party scripts loaded after interaction
The Verdict
Web performance isn't a "nice to have" — it's a competitive advantage. The fastest site in your category wins more traffic, more conversions, and more repeat visitors. And the good news: most of the biggest wins are simple engineering hygiene — proper image formats, deferred scripts, and a CDN.
The best time to optimize your site was before launch. The second best time is today.
Need a Performance Audit?
We've optimized sites from 20-point to 95-point Lighthouse scores. Let us audit yours for free.