WordPress Performance

Reference articles for the WordPress performance problems I see most often: a site that feels slow for visitors, a sluggish wp-admin, response times that vary unpredictably during the day, traffic spikes that push the server over the edge, and the resource limits behind all of it.

The goal of each article is to help you locate where the slowdown actually lives, inside WordPress, inside the database, inside the caching layer, or inside the hosting environment, before you start changing settings.

Scroll

Articles

  1. Why a WordPress site feels slow

    Slowness on a WordPress site is rarely one thing. It is a layered measurement, the sum of network time, server time, and browser time. This article frames what visitors actually experience on the front end, where in a WordPress request the time tends to go, and which adjacent problems people routinely confuse with a slow site.

    1486 words
  2. Why the WordPress admin is slow

    A WordPress dashboard that lags while the public site stays fast is one of the most common WordPress complaints. The reason is structural, not a bug. The admin runs a fundamentally different request shape than the front end, and almost every optimization that helps visitors does nothing for it. This article explains why.

    1686 words
  3. What TTFB is and why WordPress sites often have a high one

    Time to First Byte is the wait between a browser starting a request and the first byte of the response arriving. On a WordPress site it is the single best measurement of how long the server takes to do its work before the page can begin rendering. This article explains what TTFB includes, what a high value really signals, and which adjacent problems people routinely confuse it with.

    1323 words
  4. What high CPU usage means for a WordPress site

    High CPU usage means the server is spending most of its processor time running PHP, MySQL, and supporting processes for your WordPress site. This article explains what CPU usage actually measures, why a capped CPU produces the symptoms you see, and which adjacent problems people routinely confuse with it.

    1477 words
  5. What PHP workers are and why they get exhausted in WordPress

    PHP workers are the server processes that turn a WordPress request into HTML. When all of them are busy at once, the next request waits in a queue and the site stalls. This article explains the mechanism, the pool modes, and the symptoms a saturated pool produces, so the rest of the performance knowledge base makes sense.

    1421 words
  6. How to fix WordPress slow after a plugin install

    You activated a plugin and the site immediately felt heavier, in the dashboard, on the front end, or both. This article walks through a five-step procedure to confirm that the new plugin is actually the cause, profile what it does on every request, and decide whether to tune it, replace it, or remove it.

    2714 words
  7. Why WordPress can feel slow after an update

    A WordPress site that was fast yesterday and sluggish today, right after a core, plugin, or theme update, is usually hitting one of two very different problems. This article explains the mechanism behind post-update slowness, how to tell a temporary dip from a structural regression, and which adjacent problems people routinely mistake for it.

    1236 words
  8. Why a WordPress site is sometimes slow and sometimes fast

    A WordPress site that is fast one minute and slow the next is not behaving randomly. Intermittent slowness always has a pattern, and the pattern tells you which part of the stack is under pressure. This article explains the mechanism, catalogues the shapes the pattern takes, and separates intermittent slowness from the problems people confuse it with.

    1399 words
  9. What a slow database means in WordPress and what causes it

    Almost every WordPress page build runs dozens of SQL queries before the first byte leaves the server. When people say the database is slow, they usually mean one of five very different things, and the fix for each one is different. This article explains what those five things actually are, why WordPress puts so much load on the database in the first place, and which adjacent problems get blamed on the database when they shouldn't.

    1524 words
  10. Why WooCommerce is slower than a regular WordPress site

    A WooCommerce store is not a content site with a shopping cart bolted on. It is a different shape of WordPress, with a different request profile, different database pressure, and a large uncacheable surface that a blog does not have. This article explains what actually makes WooCommerce slower than a vanilla WordPress site, so the rest of the performance knowledge base makes sense for store owners.

    1806 words
  11. How WordPress caching actually works

    WordPress caching is not one thing. It is at least four separate layers, each solving a different problem, each with its own failure modes, and each configured in a different place. This article explains what each layer actually does, which layer a caching plugin is talking about when it says caching, and which problems caching does not solve at all.

    3046 words
  12. Why your WordPress cache is not working

    A caching plugin is installed, the dashboard says everything is green, and the site still feels slow or the hit rate sits at zero. Nine times out of ten the plugin is working correctly and the cache is being bypassed for a reason you can identify in ten minutes. This article walks through the causes in order of how common they actually are on WooCommerce and content sites, how to verify which one is hitting you, and what to fix in each case.

    3321 words
  13. How to set up Redis object cache in WordPress

    Your host recommends Redis. You installed the Redis Object Cache plugin, but the dashboard still says 'Drop-in: Invalid' or 'Not connected'. This walkthrough covers what the drop-in actually is, the wp-config.php constants that matter, the Docker Compose trap, and how to verify the cache is doing work.

    2649 words
  14. WordPress wp-cron: why it fails and how to replace it

    WP-Cron looks like a cron daemon but it is not one. It is a PHP routine that only runs when a visitor hits the site, which is exactly why scheduled posts go missing, backups skip their window, and WooCommerce emails arrive hours late. This article explains what WP-Cron actually is, why it fails, and how to replace it with a real system cron so scheduled work runs when it is supposed to.

    2903 words
  15. Autoloaded data in wp_options: how a bloated table slows WordPress

    Your hosting report warns that autoloaded options in wp_options are huge, or the WordPress Site Health screen shows a critical warning about autoload size. This article explains what autoload actually is, why a bloated autoload set slows every single request, which measurements matter (and which do not), and how to shrink it without breaking the site.

    2797 words
  16. WordPress Heartbeat API: what it is and how to control it

    The Heartbeat API is the built-in WordPress polling system that powers autosave, post locking, and real-time admin notifications. It also shows up as one of the most common suspects when a hosting provider reports high admin-ajax.php traffic. This article explains what Heartbeat actually does, how to tell it apart from WooCommerce cart fragments, and how to throttle it safely without breaking the editor.

    2719 words
  17. WordPress + Cloudflare: the correct configuration and common conflicts

    Cloudflare in front of WordPress can speed a site up, harden it against attacks, and break it in three or four very specific ways. This article walks through the correct setup sequence, the SSL mode that does not loop, the cache rules that do not break logged-in users or WooCommerce, and the misconfigurations I see most often when a site is in trouble.

    4492 words
  18. Diagnosing high admin-ajax.php load in WordPress

    A hosting dashboard or APM trace that ranks admin-ajax.php as the top URL by request count or CPU time tells you almost nothing on its own. The file is a dispatcher: it routes every AJAX call WordPress plugins make to the right PHP handler. The real question is which action is generating the load, and why. This article covers how to identify the caller, fix the five most common causes, and avoid the fixes that make things worse.

    1985 words
  19. WordPress CDN setup: offloading static assets the right way

    Putting a CDN in front of WordPress is one of the cheapest performance upgrades on the menu, but only if you understand which kind of CDN you are setting up and which one your stack already has. This article walks through the difference between a reverse-proxy CDN like Cloudflare and a pull-zone CDN like BunnyCDN or KeyCDN, the actual setup steps for each, the WordPress plugin that does the URL rewriting, and the dynamic paths you must keep out of the cache.

    3384 words
  20. WordPress image optimization: WebP, compression, and lazy loading

    When PageSpeed Insights flags a WordPress site for slow images, the fix is rarely a single setting in a single plugin. It is a small stack of decisions: which format to upload, how aggressively to compress, what to lazy-load and what to absolutely not lazy-load, and how the LCP image gets prioritised. This article walks through that stack and explains what WordPress core already does for you in 2026.

    2800 words
  21. WordPress + Nginx FastCGI cache: full-page caching at the server level

    Nginx can cache rendered WordPress HTML in shared memory and on disk and serve it to subsequent visitors without ever invoking PHP. This article walks through a production-ready FastCGI cache configuration: zone setup, the bypass rules that keep dashboards and carts uncached, stampede protection, purging via the Nginx Cache plugin, and how to read $upstream_cache_status to confirm the cache is doing its job.

    3543 words
  22. WooCommerce database optimization for high-order-volume stores

    A WooCommerce store with tens of thousands of orders develops specific database problems that generic WordPress advice does not fix. The order admin crawls, the reports screen times out, and the database keeps growing. This article walks through the concrete steps to diagnose which part of the database is the bottleneck, migrate to HPOS if you have not yet, clean up the tables that grow silently alongside orders, and set up maintenance that prevents the problem from coming back.

    1737 words
  23. PHP-FPM tuning for WordPress: calculating pm.max_children and choosing a process manager mode

    PHP-FPM pool settings decide how many PHP workers your server can run at once and how they are managed. This guide walks through the three process manager modes, the formula for calculating pm.max_children from available RAM, the supporting directives that control spare workers and recycling, and a worked example for a 4 GB VPS running WordPress with WooCommerce.

    1394 words
  24. WordPress database maintenance: cleaning up revisions, orphaned postmeta, and bloated tables

    WordPress accumulates post revisions, expired transients, orphaned postmeta, trashed posts, and auto-drafts over time. A site that has been running for years can have a database twice the size it needs to be. This guide walks through each type of waste, how to safely remove it using WP-CLI and SQL queries, how to cap revisions going forward, and how to run OPTIMIZE TABLE without locking production traffic.

    1352 words
  25. PHP OPcache configuration for WordPress: settings, tuning, and monitoring

    OPcache is the single largest free performance win on a self-hosted WordPress server, but the default 128 MB allocation is too small for a plugin-heavy site and the default revalidation behavior is optimized for development, not production. This guide covers the six directives that matter for WordPress, a safe production profile, whether to enable JIT, how to read opcache_get_status output, and the cache-reset discipline you need when opcache.validate_timestamps is 0.

    2987 words

Where to start when WordPress feels slow

Performance problems rarely have a single cause. The fastest way to avoid wasted hours is to first locate where the slowdown lives before changing anything.

  • Note exactly where it is slow: only the front end, only wp-admin, or both. The two articles on a slow site and a slow wp-admin map to very different root causes.
  • Check whether the slowdown is constant or intermittent. Variable speed often points at caching layers, scheduled jobs, or noisy neighbours rather than your code.
  • Compare logged-in and logged-out views. A site that is fast for visitors and slow for editors is almost always a wp-admin or database problem, not a frontend one.
  • Note whether anything was changed recently: a plugin install, an update, a theme change, a configuration change. The two articles on slowness after a plugin install and slowness after an update walk through that diagnosis.

Symptom and root cause are not the same

A high TTFB, a slow database, exhausted PHP workers, and high CPU usage are usually different views of the same underlying load problem. They are listed as separate articles because the symptom you see in your monitoring drives where you look first, but they share root causes more often than not.

  • High TTFB is what visitors and tools like Lighthouse see. The cause sits behind it: a slow query, a stuck plugin call, or a backend that is waiting on something else.
  • Slow database is what shows up in slow query logs and APM. It is one of the most common causes of high TTFB.
  • Exhausted PHP workers is what you see when you run out of capacity to process concurrent requests, often because each request is taking longer than it should (often because of a slow database).
  • High CPU usage is what your hosting dashboard shows when WordPress is doing more work than usual, frequently because of a runaway plugin, an inefficient theme, or aggressive bot traffic.

If the first article you read does not match what you are seeing exactly, follow the cross-links inside it. The articles in this subcategory are written to point at each other where they overlap.

Done chasing slowdowns?

Performance issues tend to come back after quick fixes. WordPress maintenance keeps updates, caching and limits consistent.

See WordPress maintenance

Search this site

Start typing to search, or browse the knowledge base and blog.