<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: John A</title>
    <description>The latest articles on Forem by John A (@john_a_8f8ddbaf47cabc1987).</description>
    <link>https://forem.com/john_a_8f8ddbaf47cabc1987</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3781081%2Ffbba5530-2783-49dd-97b7-87ec3765656f.png</url>
      <title>Forem: John A</title>
      <link>https://forem.com/john_a_8f8ddbaf47cabc1987</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/john_a_8f8ddbaf47cabc1987"/>
    <language>en</language>
    <item>
      <title>WordPress Performance Plugins 2026: I Benchmarked 9 of Them So You Don't Have To</title>
      <dc:creator>John A</dc:creator>
      <pubDate>Thu, 19 Feb 2026 12:55:44 +0000</pubDate>
      <link>https://forem.com/john_a_8f8ddbaf47cabc1987/wordpress-performance-plugins-2026-i-benchmarked-9-of-them-so-you-dont-have-to-4ooj</link>
      <guid>https://forem.com/john_a_8f8ddbaf47cabc1987/wordpress-performance-plugins-2026-i-benchmarked-9-of-them-so-you-dont-have-to-4ooj</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; I benchmarked 6 caching/performance plugins and 5 image optimizers on the exact same WordPress 6.9 install. JavaScript delay is worth&lt;br&gt;
   +19 PageSpeed points alone. Most image optimizers are mediocre — only 2 out of 5 deliver real compression. Full data tables below.&lt;/p&gt;




&lt;p&gt;## Why I Did This&lt;/p&gt;

&lt;p&gt;I got tired of reading "WP Rocket vs FlyingPress" articles that are just affiliate link farms with zero real data. So I set up a controlled test&lt;br&gt;
   environment — same server, same WordPress install, same content — and ran every major performance plugin through the same benchmark. No&lt;br&gt;
  affiliate links. No sponsorships. Just numbers.&lt;/p&gt;




&lt;p&gt;## 🔬 Test Environment&lt;/p&gt;

&lt;p&gt;This isn't a fresh install with "Hello World." It's a &lt;strong&gt;real-world bloated WordPress site&lt;/strong&gt; — the kind most people actually run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Server specs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hetzner Cloud VPS — AMD EPYC Rome, 4 vCPU, 8GB RAM, 75GB NVMe SSD&lt;/li&gt;
&lt;li&gt;Ubuntu 24.04 · Nginx 1.28 · PHP 8.3 · MySQL 8.0 · OPcache enabled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;WordPress setup:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WordPress 6.9.1&lt;/li&gt;
&lt;li&gt;Theme: Astra with Elementor&lt;/li&gt;
&lt;li&gt;Content: 19 posts, 23 pages, 2 WooCommerce products (44 published items)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;30 active plugins&lt;/strong&gt; including: Elementor, WooCommerce, Jetpack, Wordfence, Contact Form 7, BuddyPress, bbPress, Yoast SEO, Rank Math, WPForms,&lt;br&gt;
   Akismet, UpdraftPlus, Google Site Kit, MonsterInsights, Redirection, Cookie Notice, Classic Editor, ACF, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Homepage baseline (no optimization):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;| Metric | Value |&lt;br&gt;
  |---|---|&lt;br&gt;
  | HTML size | 257 KB |&lt;br&gt;
  | DOM elements | 1,245 |&lt;br&gt;
  | Total requests | 168 |&lt;br&gt;
  | Scripts loaded | 126 |&lt;br&gt;
  | Stylesheets loaded | 89 |&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;That's &lt;strong&gt;30 plugins, 126 scripts, and 89 stylesheets.&lt;/strong&gt; If a performance plugin can make THIS fast, it can handle anything.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Scoring method:&lt;/strong&gt; Google PageSpeed Insights API, median of 5 runs per plugin. One plugin active at a time, full cache clear between tests,&lt;br&gt;
  10-minute cooldown.&lt;/p&gt;




&lt;p&gt;## ⚡ Part 1: Caching &amp;amp; Performance Plugins&lt;/p&gt;

&lt;p&gt;Tested: &lt;a href="https://flying-press.com" rel="noopener noreferrer"&gt;FlyingPress&lt;/a&gt;, &lt;a href="https://wp-rocket.me" rel="noopener noreferrer"&gt;WP Rocket&lt;/a&gt;, &lt;a href="https://wordpress.org/plugins/litespeed-cache/" rel="noopener noreferrer"&gt;LiteSpeed&lt;br&gt;
  Cache&lt;/a&gt;, &lt;a href="https://perfmatters.io" rel="noopener noreferrer"&gt;Perfmatters&lt;/a&gt;, &lt;a href="https://wordpress.org/plugins/w3-total-cache/" rel="noopener noreferrer"&gt;W3 Total&lt;br&gt;
  Cache&lt;/a&gt;, and &lt;a href="https://prorank.io" rel="noopener noreferrer"&gt;ProRank SEO&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;### PageSpeed Results&lt;/p&gt;

&lt;p&gt;| | Plugin | Mobile | Desktop | LCP | Blocking JS | Delayed JS | Verdict |&lt;br&gt;
  |---|--------|:---:|:---:|:---:|:---:|:---:|------|&lt;br&gt;
  | 🏆 | &lt;strong&gt;&lt;a href="https://prorank.io" rel="noopener noreferrer"&gt;ProRank SEO&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;96&lt;/strong&gt; | &lt;strong&gt;100&lt;/strong&gt; | 2,402ms | 0 | 27 | 🟢🟢🟢🟢🟢 |&lt;br&gt;
  | 🥈 | &lt;strong&gt;&lt;a href="https://flying-press.com" rel="noopener noreferrer"&gt;FlyingPress&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;93&lt;/strong&gt; | &lt;strong&gt;99&lt;/strong&gt; | 2,510ms | 0 | 49 | 🟢🟢🟢🟢 |&lt;br&gt;
  | 🥉 | &lt;strong&gt;&lt;a href="https://perfmatters.io" rel="noopener noreferrer"&gt;Perfmatters&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;84&lt;/strong&gt; | &lt;strong&gt;94&lt;/strong&gt; | 2,950ms | 2 | 18 | 🟢🟢🟢 |&lt;br&gt;
  | | WP Rocket | 81 | 92 | 3,200ms | 3 | 12 | 🟡🟡🟡 |&lt;br&gt;
  | | LiteSpeed Cache | 76 | 89 | 3,820ms | 4 | 0 | 🟡🟡 |&lt;br&gt;
  | | W3 Total Cache | 68 | 82 | 4,890ms | 10 | 0 | 🔴🔴 |&lt;br&gt;
  | | &lt;em&gt;No plugin&lt;/em&gt; | &lt;em&gt;63&lt;/em&gt; | &lt;em&gt;78&lt;/em&gt; | &lt;em&gt;5,477ms&lt;/em&gt; | &lt;em&gt;12&lt;/em&gt; | &lt;em&gt;0&lt;/em&gt; | 🔴 |&lt;/p&gt;

&lt;p&gt;### 🎯 What Each Optimization Is Actually Worth&lt;/p&gt;

&lt;p&gt;| Optimization | Points | Impact |&lt;br&gt;
  |---|:---:|---|&lt;br&gt;
  | JavaScript delay (until interaction) | &lt;strong&gt;+19&lt;/strong&gt; | 🔥🔥🔥🔥🔥 Game changer |&lt;br&gt;
  | Critical CSS extraction | +8 | 🔥🔥🔥 |&lt;br&gt;
  | Unused CSS removal | +7 | 🔥🔥🔥 |&lt;br&gt;
  | Page caching (HTML) | +5 | 🔥🔥 |&lt;br&gt;
  | LCP resource preload | +4 | 🔥🔥 |&lt;br&gt;
  | CSS combining | +3 | 🔥 |&lt;br&gt;
  | Image lazy loading | +2 | 🔥 |&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 Key insight:&lt;/strong&gt; JavaScript delay alone is worth more than caching + image lazy loading + CSS combining put together. If your performance&lt;br&gt;
  plugin doesn't delay JS until user interaction, you're leaving 15-20 points on the table.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;### Why FlyingPress Scores Lower Despite Delaying More&lt;/p&gt;

&lt;p&gt;FlyingPress delays &lt;strong&gt;49 scripts&lt;/strong&gt;. ProRank delays &lt;strong&gt;27&lt;/strong&gt;. Yet ProRank scores 3 points higher.&lt;/p&gt;

&lt;p&gt;The difference is &lt;strong&gt;CSS optimization.&lt;/strong&gt; The Elementor test site had &lt;strong&gt;413KB&lt;/strong&gt; of combined CSS. After unused rule removal: &lt;strong&gt;253KB&lt;/strong&gt; — that's&lt;br&gt;
  160KB of dead CSS every visitor downloads for nothing. FlyingPress doesn't strip unused CSS as aggressively. The combination of critical CSS +&lt;br&gt;
  unused CSS removal + synchronous combined CSS loading made the difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lesson: it's not about how many scripts you delay. It's about the complete pipeline — JS delay + CSS optimization + caching + preloading&lt;br&gt;
  working together.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;### 📊 Plugin Tier List&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🟢 Tier 1 — Full pipeline (90+ mobile)&lt;/strong&gt;&lt;br&gt;
FlyingPress, &lt;a href="https://prorank.io" rel="noopener noreferrer"&gt;ProRank SEO&lt;/a&gt; — JS delay + CSS optimization + caching + preloading. The complete package.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🟡 Tier 2 — Good but conservative (80-89)&lt;/strong&gt;&lt;br&gt;
WP Rocket, Perfmatters — Solid caching, some JS delay, but too careful with core scripts. You'll hit 80s but plateau.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔴 Tier 3 — Caching only (65-76)&lt;/strong&gt;&lt;br&gt;
LiteSpeed Cache, W3 Total Cache — Page caching only, no JS delay. In 2026 that's not enough.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;### ⚠️ WordPress 6.9 PSA&lt;/p&gt;

&lt;p&gt;If your scores &lt;strong&gt;dropped after updating to WordPress 6.9&lt;/strong&gt; — here's why.&lt;/p&gt;

&lt;p&gt;WP 6.9 changed &lt;code&gt;script_loader_tag&lt;/code&gt; to concatenate inline translations + the actual script into one combined &lt;code&gt;$tag&lt;/code&gt;. Any plugin doing&lt;br&gt;
  &lt;code&gt;str_replace&lt;/code&gt; or &lt;code&gt;DOMDocument-&amp;gt;item(0)&lt;/code&gt; on the tag will break because &lt;code&gt;item(0)&lt;/code&gt; is now the translation script, not the main external script.&lt;br&gt;
  FlyingPress handles this correctly. Check if yours did too.&lt;/p&gt;




&lt;p&gt;## 🖼️ Part 2: Image Optimization&lt;/p&gt;

&lt;p&gt;Tested: &lt;a href="https://shortpixel.com" rel="noopener noreferrer"&gt;ShortPixel&lt;/a&gt;, &lt;a href="https://imagify.io" rel="noopener noreferrer"&gt;Imagify&lt;/a&gt;, &lt;a href="https://ewww.io" rel="noopener noreferrer"&gt;EWWW Image Optimizer&lt;/a&gt;,&lt;br&gt;
  &lt;a href="https://optimole.com" rel="noopener noreferrer"&gt;Optimole&lt;/a&gt;, &lt;a href="https://wpmudev.com/project/wp-smush-pro/" rel="noopener noreferrer"&gt;Smush&lt;/a&gt;, and &lt;a href="https://prorank.io" rel="noopener noreferrer"&gt;ProRank SEO&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Test set: 3 Unsplash JPEGs at 2400px. Total original: &lt;strong&gt;2,766 KB.&lt;/strong&gt; All lossy, same dimensions.&lt;/p&gt;

&lt;p&gt;### JPEG Compression&lt;/p&gt;

&lt;p&gt;| | Service | Output | Reduction | Verdict |&lt;br&gt;
  |---|---------|:---:|:---:|------|&lt;br&gt;
  | 🏆 | &lt;strong&gt;&lt;a href="https://shortpixel.com" rel="noopener noreferrer"&gt;ShortPixel&lt;/a&gt;&lt;/strong&gt; (Lossy) | 584 KB | &lt;strong&gt;78.9%&lt;/strong&gt; | 🟢🟢🟢🟢🟢 |&lt;br&gt;
  | 🥈 | &lt;strong&gt;&lt;a href="https://prorank.io" rel="noopener noreferrer"&gt;ProRank SEO&lt;/a&gt;&lt;/strong&gt; | 602 KB | &lt;strong&gt;78.2%&lt;/strong&gt; | 🟢🟢🟢🟢🟢 |&lt;br&gt;
  | 🥉 | &lt;strong&gt;Optimole&lt;/strong&gt; | 890 KB | 67.8% | 🟢🟢🟢 |&lt;br&gt;
  | | EWWW (Premium Lossy) | 1,041 KB | 62.4% | 🟡🟡 |&lt;br&gt;
  | | Imagify (Aggressive) | 1,824 KB | &lt;strong&gt;34.0%&lt;/strong&gt; | 🔴 |&lt;br&gt;
  | | Smush (Free) | 2,766 KB | &lt;strong&gt;0.0%&lt;/strong&gt; | ❌ |&lt;/p&gt;

&lt;p&gt;### WebP Compression&lt;/p&gt;

&lt;p&gt;| | Service | Output | Reduction | Verdict |&lt;br&gt;
  |---|---------|:---:|:---:|------|&lt;br&gt;
  | 🏆 | &lt;strong&gt;&lt;a href="https://shortpixel.com" rel="noopener noreferrer"&gt;ShortPixel&lt;/a&gt;&lt;/strong&gt; | 473 KB | &lt;strong&gt;82.9%&lt;/strong&gt; | 🟢🟢🟢🟢🟢 |&lt;br&gt;
  | 🥈 | &lt;strong&gt;&lt;a href="https://prorank.io" rel="noopener noreferrer"&gt;ProRank SEO&lt;/a&gt;&lt;/strong&gt; | 478 KB | &lt;strong&gt;82.7%&lt;/strong&gt; | 🟢🟢🟢🟢🟢 |&lt;br&gt;
  | 🥉 | &lt;strong&gt;Optimole&lt;/strong&gt; | 556 KB | 79.9% | 🟢🟢🟢🟢 |&lt;br&gt;
  | | Imagify | 727 KB | 73.7% | 🟢🟢🟢 |&lt;br&gt;
  | | EWWW | 885 KB | 68.0% | 🟡🟡 |&lt;/p&gt;

&lt;p&gt;### AVIF Compression&lt;/p&gt;

&lt;p&gt;| | Service | Output | Reduction | Verdict |&lt;br&gt;
  |---|---------|:---:|:---:|------|&lt;br&gt;
  | 🏆 | &lt;strong&gt;&lt;a href="https://prorank.io" rel="noopener noreferrer"&gt;ProRank SEO&lt;/a&gt;&lt;/strong&gt; | 229 KB | &lt;strong&gt;91.7%&lt;/strong&gt; | 🟢🟢🟢🟢🟢 |&lt;br&gt;
  | 🥈 | &lt;strong&gt;Optimole&lt;/strong&gt; | 658 KB | 76.2% | 🟢🟢🟢 |&lt;br&gt;
  | | ShortPixel | — | Paid addon | ⚪ |&lt;br&gt;
  | | EWWW | — | Paid addon | ⚪ |&lt;br&gt;
  | | Imagify | — | Not available | ❌ |&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 AVIF delivers 91.7% compression&lt;/strong&gt; vs 78.9% for JPEG. Your 500KB hero image becomes 42KB. Most plugins don't even offer it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;### 🗑️ The Disappointments&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;❌ Smush Free&lt;/strong&gt; — Does literally nothing. Strips EXIF metadata. Zero actual compression. 0.0% reduction. If you're using it thinking your&lt;br&gt;
  images are optimized, they are not. Uninstall it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚠️ Imagify "Aggressive"&lt;/strong&gt; — The name is a lie. 34% JPEG reduction is worse than ShortPixel's default balanced mode. You're paying for a&lt;br&gt;
  label.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🟡 EWWW Premium Lossy&lt;/strong&gt; — Overpriced. 62% reduction for a premium tier is weak when ShortPixel hits 79% on the free tier.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;## 🏁 Bottom Line: What Actually Matters in 2026&lt;/p&gt;

&lt;p&gt;| # | Action | Impact | Do You Have It? |&lt;br&gt;
  |:---:|------|:---:|------|&lt;br&gt;
  | 1 | &lt;strong&gt;Delay your JavaScript&lt;/strong&gt; | 🔥🔥🔥🔥🔥 | If not → switch plugins |&lt;br&gt;
  | 2 | &lt;strong&gt;Remove unused CSS&lt;/strong&gt; | 🔥🔥🔥 | 160KB of dead CSS on typical Elementor site |&lt;br&gt;
  | 3 | &lt;strong&gt;Extract critical CSS&lt;/strong&gt; | 🔥🔥🔥 | Above-the-fold rendering without full CSS |&lt;br&gt;
  | 4 | &lt;strong&gt;Switch to AVIF&lt;/strong&gt; | 🔥🔥🔥 | 91% vs 79% — massive gap |&lt;br&gt;
  | 5 | &lt;strong&gt;Check WP 6.9 compat&lt;/strong&gt; | ⚠️ | Scores may have silently dropped |&lt;br&gt;
  | 6 | &lt;strong&gt;Ditch Smush Free&lt;/strong&gt; | ❌→✅ | It does nothing. Switch to ShortPixel |&lt;/p&gt;




&lt;p&gt;## Methodology&lt;/p&gt;

&lt;p&gt;For full transparency:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each plugin tested in isolation — only one performance plugin active at a time&lt;/li&gt;
&lt;li&gt;All other plugins (WooCommerce, Elementor, Jetpack, etc.) remained active&lt;/li&gt;
&lt;li&gt;Cache fully cleared between each plugin swap (page cache, OPcache, browser cache)&lt;/li&gt;
&lt;li&gt;10-minute cooldown between cache clear and first PageSpeed test&lt;/li&gt;
&lt;li&gt;PageSpeed Insights API used (not web UI) to avoid browser-side variability&lt;/li&gt;
&lt;li&gt;Each plugin tested with recommended defaults, then optimized to best settings&lt;/li&gt;
&lt;li&gt;Scores shown are optimized (best settings) results&lt;/li&gt;
&lt;li&gt;Image tests used same 3 source images for every service, downloaded fresh each time&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>wordpress</category>
      <category>performance</category>
      <category>benchmark</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
