Title: Dragon Speed Doctor &#8211; Find What Slows Your Site Down
Author: Dragon Core
Published: <strong>September 18, 2026</strong>
Last modified: September 18, 2026

---

Search plugins

![](https://ps.w.org/dragon-speed-doctor/assets/banner-772x250.png?rev=3702091)

![](https://ps.w.org/dragon-speed-doctor/assets/icon-256x256.png?rev=3702091)

# Dragon Speed Doctor – Find What Slows Your Site Down

 By [Dragon Core](https://profiles.wordpress.org/dragoncoreltd/)

[Download](https://downloads.wordpress.org/plugin/dragon-speed-doctor.1.0.6.zip)

 * [Details](https://wordpress.org/plugins/dragon-speed-doctor/#description)
 * [Reviews](https://wordpress.org/plugins/dragon-speed-doctor/#reviews)
 *  [Installation](https://wordpress.org/plugins/dragon-speed-doctor/#installation)
 * [Development](https://wordpress.org/plugins/dragon-speed-doctor/#developers)

 [Support](https://wordpress.org/support/plugin/dragon-speed-doctor/)

## Description

Every slow WordPress site raises the same question: **which plugin is doing this?**
Dragon Speed Doctor answers it with measurements, not guesswork.

Press one button and the doctor times your site over a few minutes of internal test
requests, with each plugin briefly left out of those test requests only, then tells
you what each plugin actually costs:

 * **Per-plugin timing, front-end and wp-admin:** “Adds about 180–260ms to page 
   loads.” Real measured ranges, never invented precision. When results are too 
   noisy to trust, it says so instead of making a number up.
 * **Asset audit:** every script and stylesheet on your pages, attributed to the
   plugin that ships it, with sizes and render-blocking flags. Sometimes a plugin’s
   PHP is fast but it sends 900KB of JavaScript to every visitor, and the doctor
   catches that too.
 * **Database signals:** autoloaded-option weight (a common hidden slowdown) with
   probable owners.
 * **Plain-English verdicts** with Low / Medium / High impact badges, sorted worst
   first.
 * **Before/after comparison:** run a scan before updating plugins and another after,
   and see what changed. A rolling history of recent scans is kept automatically.
 * **Dependency awareness:** plugins that can’t be separated (a WooCommerce payment
   gateway, say) are measured together and labelled honestly.
 * **WP-CLI**: `wp speed-doctor scan`.

Visitors are never affected: plugin loading is only altered for the doctor’s own
internal, cryptographically signed test requests. Your live traffic always sees 
the site exactly as configured.

#### Features

 * **Per-Plugin Timing** – What each plugin costs on the front end and in wp-admin,
   as honest measured ranges
 * **Asset Audit** – Every script and stylesheet on your pages, attributed to the
   plugin that ships it, with render-blocking flags
 * **Database Signals** – Autoloaded-option weight and probable owners, a common
   hidden slowdown
 * **Plain-English Verdicts** – Low, Medium and High impact badges, sorted worst
   first, no jargon
 * **Before & After** – Scan before updating plugins and again after, and see exactly
   what changed
 * **Dependency Awareness** – Plugins that cannot be separated are measured together
   and labelled honestly
 * **Honest Confidence** – Says “inconclusive” when the server is too noisy, instead
   of inventing a number
 * **WP-CLI** – `wp speed-doctor scan` for scripted or scheduled diagnosis
 * **No External Services** – Everything runs on your own server; nothing is sent
   anywhere

Everything above is free, fully functional and unlimited.

#### How it measures

The method is built for noisy shared hosting: repeated interleaved timings, medians
with confidence bands, warmup passes discarded, early stopping when a result is 
already clear, and honest “inconclusive” verdicts when server noise wins. A pre-
scan check verifies your site can be measured (loopback requests allowed, no page
cache serving the test requests, no background jobs adding noise) before anything
runs.

#### The measurement loader

Timing a plugin’s absence requires briefly loading the site without it, for signed
internal requests only. A small helper file in `mu-plugins` does this. It is installed
only when you click the button, shown with its status on the Doctor screen, does
nothing for any normal request, and is removed automatically when you deactivate
the plugin.

### External services

None. The doctor measures your site by requesting your own pages from your own server.
Nothing is sent to Dragon Core or any third party. No telemetry, no accounts, no
cloud.

## Screenshots

[⌊The Doctor tab: the measurement loader's status and one button to run a diagnosis.⌉⌊
The Doctor tab: the measurement loader's status and one button to run a diagnosis
.⌉[

The Doctor tab: the measurement loader’s status and one button to run a diagnosis.

[⌊Results: plain-English verdicts with impact badges, worst first.⌉⌊Results: plain-
English verdicts with impact badges, worst first.⌉[

Results: plain-English verdicts with impact badges, worst first.

[⌊Assets: what every plugin ships to your pages, with render-blocking counts.⌉⌊Assets:
what every plugin ships to your pages, with render-blocking counts.⌉[

Assets: what every plugin ships to your pages, with render-blocking counts.

[⌊Database: autoloaded option weight and probable owners.⌉⌊Database: autoloaded 
option weight and probable owners.⌉[

Database: autoloaded option weight and probable owners.

[⌊A diagnosis running: preflight checks passed, with live progress.⌉⌊A diagnosis
running: preflight checks passed, with live progress.⌉[

A diagnosis running: preflight checks passed, with live progress.

## Installation

 1. Upload the `dragon-speed-doctor` folder to `/wp-content/plugins/`, or install via
    the Plugins screen.
 2. Activate the plugin.
 3. Go to Tools  Speed Doctor, install the measurement loader, and run a diagnosis.

## FAQ

### Why is my WordPress site slow?

Usually one of four things: a plugin doing heavy work on every request, a plugin
shipping large scripts to every page, bloated autoloaded options in the database,
or slow hosting. The doctor measures the first three directly and tells you which
plugin is responsible, so you fix the actual cause instead of guessing.

### Is it safe to run on a live site?

Yes, with one caveat. Visitors are never served a modified site. Plugin loading 
changes only for the doctor’s own signed internal requests. The caveat: a scan sends
a few hundred requests to your server over several minutes, which adds load. On 
a busy site, run it at a quiet time, or enable host-safe mode in Settings to slow
it down further.

### How is this different from Query Monitor?

Query Monitor is a superb developer tool that inspects the current request in deep
technical detail. The doctor answers a different question, namely which plugin to
blame, by measuring whole pages with and without each plugin, and it answers in 
sentences rather than stack traces. Many people will want both.

### Is this a profiler?

Not in the function-call sense. It does not hook into PHP or list which functions
ran. It measures whole page loads with and without each plugin, so the result is
a per-plugin cost in milliseconds rather than a call tree. The asset and database
audits are separate, single-pass checks.

### Why does a plugin say “measured together with plugins that depend on it”?

Some plugins fatal when a plugin they depend on is missing, such as a WooCommerce
extension without WooCommerce. The doctor detects this and measures the group as
a whole rather than breaking your test requests.

### Does it work behind a reverse proxy or in a container?

Usually yes, automatically. If your server cannot reach its own public URL, define`
DRAGONSPEEDDOCTOR_LOOPBACK_BASE` in `wp-config.php` with an address the server can
reach (for example `http://app-container` or a private IP). Only the scheme, host
and port are used; any path on the address is ignored because each request keeps
its own path. The doctor keeps the correct Host header so WordPress routes normally.
For safety the override is honoured only when the host is `localhost`, a loopback,
private or link-local IP address written in full (dotted IPv4 or bracketed IPv6),
or a hostname whose every DNS address is in one of those ranges. Anything else, 
including a name that does not resolve, is ignored, so measurement traffic never
leaves your infrastructure.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Dragon Speed Doctor – Find What Slows Your Site Down” is open source software. 
The following people have contributed to this plugin.

Contributors

 *   [ Dragon Core ](https://profiles.wordpress.org/dragoncoreltd/)

[Translate “Dragon Speed Doctor – Find What Slows Your Site Down” into your language.](https://translate.wordpress.org/projects/wp-plugins/dragon-speed-doctor)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/dragon-speed-doctor/),
check out the [SVN repository](https://plugins.svn.wordpress.org/dragon-speed-doctor/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/dragon-speed-doctor/)
by [RSS](https://plugins.trac.wordpress.org/log/dragon-speed-doctor/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.6

 * Added: an occasional, dismissible request for a WordPress.org review once the
   doctor has produced results, shown only on its own screen.
 * Changed: listing title and tags for the WordPress.org directory.

#### 1.0.5

 * Fixed: two active plugins whose Requires Plugins headers point at each other (
   or a longer loop of them) made the dependency grouping recurse until PHP ran 
   out of memory before a diagnosis could start. Chains are now walked without recursion,
   and every plugin in such a loop is measured as one group.
 * Changed: readme wording tidied.

#### 1.0.4

 * Fixed: asset sizes were reported as 0 for scripts and styles with a scheme-relative(//),
   http:// or document-relative address, for percent-encoded file names, on subdirectory
   installs, and when wp-content lives outside the WordPress folder. Every address
   is now resolved against the page it was found on, then located with the site 
   path stripped and wp-content resolved to its real directory. Only files inside
   the WordPress and wp-content folders are ever read.
 * Fixed: the asset table could attribute a plugin’s scripts to “core/other” when
   the address differed from the site’s wp-content URL in scheme, letter case or
   a www. prefix, or used ../ segments. Attribution now matches on the resolved 
   host and path.
 * Fixed: DRAGONSPEEDDOCTOR_LOOPBACK_BASE with a path (for example http://app-container/
   wp) doubled that path on subdirectory installs and timed 404 pages. The base 
   is now used as an origin only; each request keeps its own path.
 * Security: the loopback base is validated more strictly. IP literals must be a
   full dotted IPv4 or bracketed IPv6 address in a loopback, private or link-local
   range (integer, shorthand and public IPv6 forms are refused), and a hostname 
   is accepted only when every address it resolves to is in such a range. Unresolvable
   names are refused.
 * Fixed: activation recorded the install as complete even when the scans table 
   or the signing secret had not been stored. Both are now verified first; an incomplete
   install is retried on the next admin load and shown as an admin notice until 
   it succeeds. Existing sites are checked once on upgrade.
 * Fixed: a diagnosis that could not be started, saved or finished in the database
   is now reported as an error instead of appearing to start or finish without results.

#### 1.0.3

 * Wording tidied across the readme and the plugin screens for clarity. No functional
   changes.

#### 1.0.2

 * Readme: changelog and upgrade notice now cover 1.0.1, which shipped without entries.
 * Code comments reworded to describe the filter hooks they document.

#### 1.0.1

 * Safety: during a measurement request the active-plugins list can no longer be
   written back to the database, so a probe can never deactivate your other plugins.
 * Reliability: an abandoned scan is reclaimed after 15 minutes so it cannot block
   future scans; the measurement loader is refreshed before each run.

#### 1.0.0

 * Initial release: per-plugin timing attribution (front-end and wp-admin), asset
   audit, database signals, plain-English verdicts, before/after comparison, WP-
   CLI.

## Meta

 *  Version **1.0.6**
 *  Last updated **10 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.2 or higher **
 *  Tested up to **7.1.1**
 *  PHP version ** 8.0 or higher **
 * Tags
 * [performance](https://wordpress.org/plugins/tags/performance/)[plugin profiler](https://wordpress.org/plugins/tags/plugin-profiler/)
   [site-speed](https://wordpress.org/plugins/tags/site-speed/)[slow](https://wordpress.org/plugins/tags/slow/)
   [speed](https://wordpress.org/plugins/tags/speed/)
 *  [Advanced View](https://wordpress.org/plugins/dragon-speed-doctor/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/dragon-speed-doctor/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/dragon-speed-doctor/reviews/)

## Contributors

 *   [ Dragon Core ](https://profiles.wordpress.org/dragoncoreltd/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/dragon-speed-doctor/)