WP Performance Toolkit
Performance monitoring, query profiling, asset analysis, and optimization for WordPress.
by Laban The Great · github.com/labanthegreat/wp-performance-toolkit · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/labanthegreat/wp-performance-toolkit/archive/refs/heads/main.zipA WordPress plugin for monitoring and diagnosing performance issues. It profiles database queries, analyzes enqueued assets, tracks object cache efficiency, manages WP-Cron events, and provides toggleable optimizations -- all from an admin dashboard and WP-CLI.
Features
Performance Monitoring
- Per-request tracking of page generation time, peak memory usage, database query count/time, hooks fired, TTFB, and external HTTP requests
- Request log stored in a custom database table (auto-pruned to 500 rows)
- Slowest-hooks ranking by cumulative execution time
- Hourly trend data and query-count distribution for historical analysis
Database Query Profiler
- Slow query detection with configurable threshold (default 0.05s, stored in
wppt_slow_query_thresholdoption) - Duplicate query detection
- N+1 query pattern identification
- Per-table and per-caller query breakdowns
- Index suggestions for slow queries
- Requires
SAVEQUERIESto be enabled inwp-config.phpfor full analysis
Asset Analyzer
- Lists all enqueued scripts and styles with file sizes
- Identifies render-blocking resources
- Suggests defer/async candidates
- Maps each asset to its source (core, plugin, theme, or external)
- Builds dependency trees
Object Cache Analyzer
- Detects the active cache backend (Redis, Memcached, APCu, Relay, or default)
- Tracks cache hit/miss rates
- Reports per-group memory usage
- Provides actionable suggestions based on cache state
WP-Cron Manager
- Lists all scheduled cron events with source identification
- Detects orphaned events (hooks with no registered callbacks)
- Supports manual execution, deletion, and rescheduling of events
- Logs cron execution times
Optimizations Individually toggleable optimizations organized by category:
| Key | Category | Description |
|---|---|---|
disable_emojis |
Frontend | Remove emoji detection script and styles |
remove_query_strings |
Frontend | Strip ver query strings from CSS/JS URLs |
lazy_load_iframes |
Frontend | Add loading="lazy" to iframes |
dns_prefetch |
Frontend | Add preconnect/dns-prefetch hints for common third-party domains |
disable_oembed |
Frontend | Remove oEmbed discovery links and endpoints |
remove_shortlink |
Frontend | Remove shortlink from headers and HTML head |
defer_js |
Frontend | Add defer to front-end scripts (excludes jQuery by default) |
critical_css |
Frontend | Inline critical CSS and defer remaining stylesheets |
heartbeat_throttle |
Backend | Reduce Heartbeat API interval to 60 seconds |
heartbeat_disable |
Backend | Deregister Heartbeat script (except on post editor) |
disable_xmlrpc |
Security | Disable XML-RPC and remove X-Pingback header |
clean_revisions |
Database | Delete all post revisions (one-shot) |
clean_auto_drafts |
Database | Delete all auto-draft posts (one-shot) |
clean_trash |
Database | Permanently delete trashed posts (one-shot) |
clean_spam_comments |
Database | Delete spam and trashed comments (one-shot) |
clean_transients |
Database | Delete expired transients (one-shot) |
limit_revisions |
Database | Cap post revisions at 5 per post |
Admin Bar Widget
- Color-coded performance indicator in the admin bar (green < 200ms, yellow < 500ms, red >= 500ms)
- Shows page load time, memory usage, and query count
- Links to the dashboard
Admin Dashboard
- Multi-tab interface: Overview, Queries, Assets, Cron, Object Cache, Optimizations, Settings
- AJAX-powered optimization toggles
- Export performance reports as JSON
Requirements
- WordPress 6.0 or later
- PHP 8.0 or later
Installation
- Upload the
wp-performance-toolkitdirectory to/wp-content/plugins/. - Activate through Plugins > Installed Plugins.
- Access the dashboard under Performance in the admin menu.
For full query profiling, add the following to wp-config.php:
define( 'SAVEQUERIES', true );
Note: SAVEQUERIES adds overhead. Enable it only when actively debugging.
WP-CLI Commands
All commands are registered under the wp perf namespace.
wp perf stats
Display aggregate performance statistics.
wp perf stats
wp perf stats --hours=48
Options:
--hours=<number>-- Look-back window in hours. Default: 24.
wp perf log
Show recent request log entries.
wp perf log
wp perf log --limit=50
Options:
--limit=<number>-- Number of entries to display. Default: 20.
wp perf queries
Analyze database queries from the current request. Requires SAVEQUERIES.
wp perf queries
wp perf queries --slow-only
Options:
--slow-only-- Show only queries exceeding the slow-query threshold.
Output includes total query count, total time, slow queries, duplicate queries, N+1 patterns, per-table breakdown, and index suggestions.
wp perf assets
List enqueued scripts and styles with sizes and sources.
wp perf assets
Reports render-blocking resources when detected.
wp perf optimize
View and toggle performance optimizations.
wp perf optimize --list
wp perf optimize --enable=disable_emojis
wp perf optimize --disable=heartbeat_throttle
Options:
--list-- Show all optimizations and their current status.--enable=<name>-- Enable an optimization by key.--disable=<name>-- Disable an optimization by key.
wp perf cron
Manage WP-Cron events.
wp perf cron list
wp perf cron orphaned
wp perf cron cleanup
Subcommands:
list-- Display all scheduled cron events with next-run time, schedule, source, and overdue status.orphaned-- List cron events whose hooks have no registered callbacks.cleanup-- Remove all orphaned cron events.
wp perf benchmark
Run a page-load benchmark by issuing HTTP requests to a URL.
wp perf benchmark
wp perf benchmark --iterations=20 --url=/sample-page/
Options:
--iterations=<number>-- Number of requests. Default: 10.--url=<url>-- URL to benchmark. Default: site home URL.
Reports average, median, min, max, and P95 response times.
Hooks and Filters
wppt_preconnect_domains
Filter the list of domains used for dns-prefetch and preconnect hints when the dns_prefetch optimization is enabled.
add_filter( 'wppt_preconnect_domains', function ( array $domains ): array {
$domains[] = 'https://cdn.example.com';
return $domains;
} );
Default domains: fonts.googleapis.com, fonts.gstatic.com, www.google-analytics.com, www.googletagmanager.com, cdn.jsdelivr.net.
wppt_defer_exclude_handles
Filter the list of script handles excluded from deferral when the defer_js optimization is enabled.
add_filter( 'wppt_defer_exclude_handles', function ( array $handles ): array {
$handles[] = 'my-critical-script';
return $handles;
} );
Default exclusions: jquery, jquery-core, jquery-migrate, wp-polyfill.
wppt_critical_css
Filter the critical CSS string inlined in <head> when the critical_css optimization is enabled. Return a non-empty string to replace the default.
add_filter( 'wppt_critical_css', function (): string {
return 'body { margin: 0; } .hero { min-height: 100vh; }';
} );
Settings
Settings are accessible from the dashboard's Settings tab or managed via WP options:
| Option | Type | Default | Description |
|---|---|---|---|
wppt_slow_query_threshold |
float | 0.05 |
Slow query threshold in seconds |
wppt_optimizations |
array | [] |
Enabled optimizations (key => bool) |
Uninstall
On uninstall, the plugin removes:
- The
wppt_request_logdatabase table - The
wppt_optimizationsoption - The
wppt_cron_logoption - The
wppt_slow_query_thresholdoption
Changelog
2.0.0
- Added WP-CLI commands (
wp perf) - Added asset analyzer with render-blocking detection
- Added object cache analyzer with backend detection
- Added WP-Cron manager with orphan detection and cleanup
- Added page-load benchmarking
- Added hook execution time tracking
- Added external HTTP request tracking
- Added TTFB measurement
- Added DNS prefetch/preconnect optimization
- Added oEmbed disable, shortlink removal, revision limiting
- Added defer JS and critical CSS inlining optimizations
- Added N+1 query pattern detection
- Added index suggestions for slow queries
- Added hourly trend and query distribution data
- Added admin bar color-coded performance widget
1.0.0
- Initial release
- Database query profiler with slow query detection
- Performance monitoring (page time, memory, query count)
- Toggleable optimizations (emoji removal, query string stripping, XML-RPC disable, iframe lazy loading, Heartbeat control, database cleanup)
- Admin dashboard
- JSON report export
License
GPL-2.0-or-later