WordPress
WordPress Performance Without the Plugin Soup: A Developer's Approach
## The Plugin Trap Most WordPress Sites Fall Into
Here's a scene I encounter constantly when auditing WordPress sites: a business owner installs a performance plugin because their site is slow. It helps a little. Then they install another one that promises different improvements. Then a page builder that conflicts with the first plugin. Then a "speed optimizer" that compresses everything aggressively and breaks half the site.
Result: 23 active plugins, a GTmetrix score that looks impressive but real-world performance that's still poor, and a site that takes 8 seconds to load on a mid-range Android phone in Liverpool on a 4G connection.
**Plugin soup is not a performance strategy. It's a coping mechanism for underlying architectural problems.**
## Why Plugin-Based Performance Optimization Has Limits
Caching and optimization plugins are genuinely useful — WP Rocket, LiteSpeed Cache, and Perfmatters are legitimate tools. But they're the last 20% of the performance equation, not the first 80%.
They work best when built on top of:
1. Fast, reliable hosting
2. A lightweight, well-coded theme
3. Intentional asset management
4. Optimised images
Try adding aggressive caching to a site running a bloated page builder, 40 plugins, and unoptimised 5MB hero images — you'll get marginal improvements at best.
## The Right Order of Operations
### Step 1: Start with Hosting
This is the single highest-leverage change you can make. No amount of optimization compensates for a slow server.
For UK businesses, my current hosting recommendations by use case:
**Shared hosting (budget):** SiteGround's GrowBig plan (~£5-10/month) consistently outperforms GoDaddy, Hostgator, and most budget options for UK server response times. Avoid EIG-owned hosts (Bluehost, iPage, HostMonster) — their UK server infrastructure is poor.
**Managed WordPress (mid-tier):** Kinsta and WP Engine have excellent UK infrastructure, built-in CDN, and server-level caching. Worth the premium for business-critical sites. Expect £25-70/month.
**Performance-focused VPS:** If you understand server management (or have someone who does), a DigitalOcean or Vultr droplet in the London data centre, configured with OpenLiteSpeed or Nginx + Redis, will outperform most managed hosting at lower cost.
**The one metric that matters at the server level:** Time to First Byte (TTFB). Target under 200ms. Check it at WebPageTest.org with a UK server location selected.
### Step 2: Theme Selection (or Custom Development)
The average WooCommerce or Elementor-based WordPress theme loads 800KB–3MB of CSS and JavaScript before your content even renders. That's your performance budget gone before you've added a single line of custom code.
**Lightweight theme options in 2026:**
- **GeneratePress Premium** — My top recommendation. Extremely lightweight (~30KB CSS), no JavaScript dependencies, excellent developer hooks. Used on over 400,000 sites.
- **Kadence** — Slightly heavier than GeneratePress but has excellent block integration. Good for clients who want the Gutenberg editor.
- **Custom block theme** — For maximum performance, a custom `theme.json`-driven full-site editing (FSE) theme loads minimal CSS and zero JavaScript by default.
**Page builders and performance:** Elementor, Divi, and WPBakery add significant overhead. This doesn't make them wrong tools for every project, but understand the performance cost. For performance-critical sites, I build with Gutenberg blocks or custom PHP/Twig templates instead.
### Step 3: The Intentional Plugin Audit
Run through every active plugin and ask two questions:
1. Is this providing measurable value?
2. Can this functionality be handled by code instead?
**Common plugin replacements with code:**
Instead of a plugin that adds `defer` attributes to scripts, add this to `functions.php`:
```php
add_filter( 'script_loader_tag', function( $tag, $handle, $src ) {
if ( is_admin() ) return $tag;
return str_replace( ' src=', ' defer src=', $tag );
}, 10, 3 );
```
Instead of a plugin that removes query strings from static assets, add this:
```php
add_filter( 'style_loader_src', 'remove_query_strings', 10, 2 );
add_filter( 'script_loader_src', 'remove_query_strings', 10, 2 );
function remove_query_strings( $src ) {
return remove_query_arg( 'ver', $src );
}
```
The goal isn't to have zero plugins — it's to have intentional plugins where each one earns its place.
### Step 4: Image Optimisation (The Biggest Win)
Images typically account for 60-80% of a webpage's total transfer size. This is where the biggest performance gains live.
**The 2026 image checklist:**
**Format:** Convert all images to WebP (or AVIF for modern browsers). WebP is 25-35% smaller than JPEG at equivalent quality. If you're still serving PNG hero images on WordPress, this is likely your single biggest performance issue.
WordPress 5.8+ converts uploaded JPEG/PNG to WebP automatically if you enable it. Or use the free Shortpixel Adaptive Images plugin (free tier is generous).
**Sizing:** Never upload a 4000×3000px photo and resize it with CSS. WordPress should be generating appropriately-sized image variants via `add_image_size()` in your theme.
**Lazy loading:** WordPress adds `loading="lazy"` to images automatically since WordPress 5.5. But the *first* significant image (LCP element, usually your hero image) should have `loading="eager"` and a `fetchpriority="high"` attribute to signal the browser to load it immediately.
**Dimensions:** Always specify `width` and `height` attributes on images. This prevents layout shift (CLS) as the page loads.
### Step 5: JavaScript Strategy
JavaScript is the primary cause of poor Interaction to Next Paint (INP) scores and poor mobile performance.
**The rules:**
1. Every `