Find answers to common questions about Speed Profiler. Can't find what you're looking for? Check the WordPress.org support forum.
Try different keywords or browse the categories above.
After installing Speed Profiler, go to Tools > Speed Profiler. You'll see the Quick Setup wizard on first launch. Choose a preset (we recommend starting with "Balanced"), then click "Start Profiling". The plugin will begin collecting data immediately.
For best results:
Step 1: Initial Assessment - Start with Balanced preset to identify which plugins consume the most time. Run for 30 minutes to 1 hour.
Step 2: Deep Dive - If you find a problematic plugin, switch to Detailed mode temporarily to see exactly which hooks are slow.
Step 3: Take Action - Either disable/replace slow plugins, contact the developer, or accept the tradeoff if the plugin is essential.
Step 4: Ongoing Monitoring - Switch to Safe Mode for continuous monitoring with minimal overhead. This helps catch regressions after updates.
Focus on pages that matter most for your site's performance:
You don't need to add every page. 3-5 key pages give you a good picture of overall performance.
Speed Profiler is designed to be lightweight, but there is some overhead:
Additionally, sample rate reduces the percentage of requests that are profiled. At 25% sample rate, only 1 in 4 requests is profiled.
If overhead ever gets too high, the overload protection automatically pauses profiling to protect your site.
Safe Mode (10% sample rate, 2ms threshold, Plugin ID off)
Balanced (25% sample rate, 1ms threshold, Plugin ID on)
Detailed (100% sample rate, 0.5ms threshold, Plugin ID on)
The threshold is the minimum execution time (in milliseconds) a hook must take to be logged. Hooks faster than this are ignored.
Guidelines:
Use the Auto-Calibrate button to let Speed Profiler analyze your site and recommend an optimal threshold based on your actual performance data.
Sample rate controls what percentage of requests are profiled:
Lower sample rates mean:
For most sites, 25% gives good data while keeping overhead low. Use 10% on high-traffic production sites.
Plugin identification uses PHP Reflection to trace each hook callback back to its source file, then maps that to a plugin, theme, or WordPress Core.
Benefits:
Trade-offs:
Recommendation: Enable it when actively optimizing (Balanced/Detailed modes). Disable it for lightweight ongoing monitoring (Safe Mode).
Auto-Calibrate profiles your homepage multiple times and analyzes the results to recommend optimal settings.
How it calculates the threshold:
Example: If your homepage takes 400ms on average, the threshold would be ~2.0ms. This ensures you only capture hooks that represent a meaningful portion of response time.
Speed Profiler supports retention periods from 1 hour to 7 days.
Recommendations:
Longer retention means more database storage. If you're using Safe Mode with low sample rate, you can safely use 7 days. With Detailed mode, keep it shorter (1-24 hours).
Response time targets for WordPress/WooCommerce sites:
Note: These are server response times (TTFB), not total page load time. They don't include frontend rendering, JavaScript execution, or asset loading.
This is completely normal. WordPress Core handles essential functions like:
Core typically uses 40-60% of hook time on a healthy site. Focus on:
By Hook shows individual WordPress hooks (actions/filters) sorted by execution time:
By Plugin aggregates all hooks by their source plugin:
Start with "By Plugin" to identify problematic plugins, then switch to "By Hook" for detailed analysis.
The Health Score (0-100) gives you a quick performance assessment based on average response time:
The score is calculated relative to a 200ms baseline for excellent performance and scales down as response time increases.
DB Time - Time spent on database queries. High DB time indicates:
HTTP Time - Time spent on external HTTP requests. High HTTP time indicates:
The Hotspots card shows your top 5 slowest hooks at a glance. These are the hooks with the highest average execution time.
Hotspots help you:
Click on any hotspot to see full details in the By Hook view.
When WooCommerce is active, Speed Profiler automatically adds a dedicated WooCommerce tab that categorizes hooks by commerce area:
For WooCommerce stores, add these pages to your profiled pages list:
Checkout and cart are often the slowest due to shipping calculations, payment gateway initialization, and cart validations.
Checkout is often the slowest page because it involves:
Optimization tips:
Overload protection automatically pauses profiling when overhead gets too high. This protects your site from performance degradation.
When it triggers:
What happens:
Solution: Switch to Safe Mode preset which has much lower overhead, or reduce sample rate.
Common causes for no data appearing:
Some variation is normal. Server response time varies due to:
For accurate results:
Speed Profiler shows environment notices to help you understand factors affecting results:
OPcache not enabled - Without OPcache, PHP code is compiled every request. Enable OPcache for much faster performance (and more accurate profiling).
WP_DEBUG is enabled - Debug mode adds overhead. Results will be slower than production. This is expected.
Xdebug is active - Xdebug significantly slows PHP. Disable it for accurate benchmarks.
SAVEQUERIES is enabled - Query logging adds overhead. Consider disabling for profiling.
Low memory limit - Profiling many hooks may hit memory limits. Consider increasing to 128M+.
Full-page caching detected - Cached pages won't be profiled. This is expected behavior.
There are several reset options:
Clear Data Only: Use the "Clear All Data" button in the dashboard to delete profiling data while keeping your settings.
Reset Settings: Use "Reset to Defaults" in Settings to restore default configuration without clearing data.
Full Reset: Deactivate and reactivate the plugin to reset both settings and show the Quick Setup wizard again.
Complete Removal: Deactivate and delete the plugin. This removes all data, settings, and database tables.
Speed Profiler uses WordPress's all hook to capture every action and filter as it fires. Here's the process:
all hook at priority -999999 (start) and 999999 (end)hrtime(true) for nanosecond precision timingWhen plugin identification is enabled, Speed Profiler:
ReflectionFunction or ReflectionMethod on each callbackThe cache stores up to 500 callback-to-plugin mappings. This keeps repeat overhead low after the initial discovery.
Speed Profiler creates three custom database tables:
wp_speed_profiler_stats - Hook-level timing data with plugin attributionwp_speed_profiler_stats_plugins - Pre-aggregated plugin totals for faster dashboard querieswp_speed_profiler_responses - Response time history for trend chartsData is aggregated by minute to reduce the number of rows. A cron job runs hourly to clean up data older than the retention period.
All tables are removed when the plugin is uninstalled (deleted, not just deactivated).
Minimum Requirements:
Tested Up To:
Speed Profiler uses PHP features like typed properties (PHP 7.4+) and hrtime() (PHP 7.3+), with polyfills for PHP 8.0 string functions.
Yes, Speed Profiler works on WordPress Multisite installations. Each site in the network has its own:
Network admins can activate it network-wide or allow individual site activation.
Yes, Speed Profiler supports multiple export formats:
Export options are available for both "By Hook" and "By Plugin" views. Click the download icon in the toolbar to access export options.
Yes, Speed Profiler is fully compatible with object caching solutions. When object caching is enabled:
Object caching is recommended for database-heavy WordPress sites and doesn't interfere with profiling.
Check the WordPress.org support forum or browse the plugin documentation.