The WordPress Performance Profiling Toolkit We Actually Use
Not a plugin roundup. Four tools that actually found something on a real WordPress VIP network, what each one is blind to, and which symptom sends you to which one.
Who merges so late, past midnight's chime, still pushing bugs to master's line?
Not a plugin roundup. Four tools that actually found something on a real WordPress VIP network, what each one is blind to, and which symptom sends you to which one.
Every fix in this series landed at a different layer — application code, shared plugin, edge config, vendor dashboard. The scoping decision matters more than the fix itself, and it’s rarely obvious from the bug report.
An index that fixes one site’s slow query has a write cost paid by every site sharing that database tier. A checklist for deciding whether a covering index actually pays for itself, before adding it.
Two separate incidents on the same network turned out to be the same root cause wearing different clothes: a cache key that let the request decide what it means, instead of the other way around.
A shared plugin update needed five new indexes across a multisite network. The bug that almost shipped wasn’t in the indexes — it was in assuming a diff between two versions was the same thing as the full version.
Search Console said one site’s average crawl response time was roughly double a near-identical sibling’s. The access logs disagreed — until they were split by bot type, and a cache-busting tracking parameter fell out.
The SAVEQUERIES mu-plugin from the last post left you with a raw log file and a promise to wrap WP-CLI commands around it. Here’s the tool, not just the promise.
A plugin built to delay non-critical JavaScript until user interaction concentrated all of that JavaScript’s cost into exactly the moment interaction responsiveness gets measured.
Weeks of hero-image optimization went nowhere, because the thing Lighthouse was actually measuring wasn’t the hero image at all — it was a cookie banner’s logo.
Ads were randomly missing on one site, with no reproducible pattern anyone could find. The cause was a single automated request with the wrong Accept header, cached and served to everyone after it.