Skip to main content

Website Performance Optimization

Actionable guides to fix common performance issues and make your website load faster.

Why Performance Matters

Website performance directly impacts user experience, search rankings, and conversion rates. Studies show that:

  • 53% of mobile users abandon sites that take over 3 seconds to load
  • 1 second delay in page load time can reduce conversions by 7%
  • Google uses page speed as a ranking factor for both desktop and mobile searches

The good news: most performance issues can be fixed with a few strategic optimizations. This guide will show you how.

Quick Wins (30 Minutes or Less)

Start with these high-impact, low-effort optimizations:

🗜️ Enable Compression

Impact: Reduce file sizes by 70-90%

Enable gzip or brotli compression on your server. This compresses text-based files (HTML, CSS, JavaScript) before sending them to browsers.

Apache (.htaccess):

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/css text/javascript application/javascript
</IfModule>

Nginx:

gzip on;
gzip_types text/plain text/css application/json application/javascript;

🖼️ Optimize Images

Impact: Images typically account for 50-70% of page weight

Immediate Actions:

  • • Use modern formats (WebP for photos, SVG for icons and logos)
  • • Compress images with tools like Squoosh or TinyPNG
  • • Serve responsive images with srcset attribute
  • • Add width/height attributes to prevent layout shift
  • • Lazy load images below the fold with loading="lazy"

Example:

<img src="photo.webp"
     srcset="photo-small.webp 400w, photo-large.webp 800w"
     width="800" height="600"
     loading="lazy"
     alt="Description">

📦 Minify CSS & JavaScript

Impact: Reduce file sizes by 20-40%

Remove whitespace, comments, and unnecessary characters from your code. Most build tools do this automatically:

  • Webpack: Use mode: 'production'
  • Vite: Minification enabled by default in production
  • Manual: Use Terser for JS or cssnano for CSS

💾 Set Up Browser Caching

Impact: Eliminate repeat downloads for returning visitors

Configure cache headers to tell browsers how long to store files locally:

Apache (.htaccess):

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/jpg "access plus 1 year"
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/png "access plus 1 year"
  ExpiresByType image/webp "access plus 1 year"
  ExpiresByType text/css "access plus 1 month"
  ExpiresByType application/javascript "access plus 1 month"
</IfModule>

Intermediate Optimizations

These require more effort but deliver significant improvements:

🚀 Use a Content Delivery Network (CDN)

What: Distribute your content across global servers to reduce latency

Why: Serves files from the server closest to your users, dramatically reducing download times

Options: Cloudflare (free tier available), CloudFront, Fastly, or BunnyCDN

⚙️ Defer Non-Critical JavaScript

What: Delay loading of JavaScript that isn't needed immediately

Add defer or async attributes to script tags:

<!-- Defer: Load in order after HTML parsing -->
<script src="script.js" defer></script>

<!-- Async: Load asynchronously, execute immediately -->
<script src="analytics.js" async></script>

Rule of thumb: Use defer for scripts that depend on DOM, async for independent scripts like analytics

📝 Inline Critical CSS

What: Include CSS needed for above-the-fold content directly in HTML

Why: Eliminates render-blocking stylesheet requests for initial paint

Tools: Use Critical to automatically extract and inline critical CSS

🎯 Implement Resource Hints

What: Help browsers anticipate and prioritize resource loading

Preconnect (for external domains):

<link rel="preconnect" href="https://fonts.googleapis.com">

Preload (for critical resources):

<link rel="preload" href="font.woff2" as="font" crossorigin>

Prefetch (for next page resources):

<link rel="prefetch" href="next-page.html">

Advanced Techniques

For developers ready to take performance to the next level:

Code Splitting

Break JavaScript bundles into smaller chunks and load them on demand. Modern frameworks (React, Vue, Angular) support this natively with dynamic imports.

Tree Shaking

Remove unused code from bundles. Use ES6 modules and enable tree shaking in your bundler (Webpack, Rollup, Vite all support this).

Server-Side Rendering (SSR)

Generate HTML on the server instead of client. Frameworks like Next.js (React), Nuxt.js (Vue), and SvelteKit make this easy. Improves initial load and SEO.

HTTP/2 or HTTP/3

Upgrade your server to support modern protocols. HTTP/2 multiplexes requests, eliminates head-of-line blocking, and compresses headers. HTTP/3 is even faster with QUIC.

Service Workers & Offline Caching

Cache resources for offline use and instant repeat visits. Tools like Workbox simplify implementation of progressive web app (PWA) features.

Measuring Success

Track these metrics to validate your optimizations:

Core Web Vitals

  • LCP (Largest Contentful Paint): < 2.5s
  • FID (First Input Delay): < 100ms
  • CLS (Cumulative Layout Shift): < 0.1

Additional Metrics

  • TTFB (Time to First Byte): < 600ms
  • FCP (First Contentful Paint): < 1.8s
  • Total Page Size: < 1-2 MB
  • Total Requests: < 50 requests

Pro tip: Use LoadTime Analyzer to track these metrics over time. Run tests weekly and compare results to ensure optimizations stick and performance doesn't regress.

Performance Optimization Checklist

Test Your Optimizations

Use LoadTime Analyzer to measure your website's performance before and after optimizations.

Analyze Your Website

Related Documentation