$ -weight: 500;">curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" https://yoursite.com/
-weight: 500;">curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" https://yoursite.com/
-weight: 500;">curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" https://yoursite.com/
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 1
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 1
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 1
EXPLAIN SELECT * FROM wp_posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY post_date DESC;
EXPLAIN SELECT * FROM wp_posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY post_date DESC;
EXPLAIN SELECT * FROM wp_posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY post_date DESC;
All plugins active: TTFB 1.2s, 87 queries
All disabled: TTFB 0.4s, 22 queries (improvement: 0.8s) Re--weight: 500;">enable: + SEO Plugin: TTFB 0.6s, 35 queries (adds +0.2s) + Cache Plugin: TTFB 0.6s, 35 queries (no change) + Custom Post Type: TTFB 0.9s, 55 queries (adds +0.3s) ← OFFENDER + Analytics: TTFB 1.1s, 68 queries (adds +0.2s) ← OFFENDER + Contact Form: TTFB 1.2s, 87 queries (adds +0.1s)
All plugins active: TTFB 1.2s, 87 queries
All disabled: TTFB 0.4s, 22 queries (improvement: 0.8s) Re--weight: 500;">enable: + SEO Plugin: TTFB 0.6s, 35 queries (adds +0.2s) + Cache Plugin: TTFB 0.6s, 35 queries (no change) + Custom Post Type: TTFB 0.9s, 55 queries (adds +0.3s) ← OFFENDER + Analytics: TTFB 1.1s, 68 queries (adds +0.2s) ← OFFENDER + Contact Form: TTFB 1.2s, 87 queries (adds +0.1s)
All plugins active: TTFB 1.2s, 87 queries
All disabled: TTFB 0.4s, 22 queries (improvement: 0.8s) Re--weight: 500;">enable: + SEO Plugin: TTFB 0.6s, 35 queries (adds +0.2s) + Cache Plugin: TTFB 0.6s, 35 queries (no change) + Custom Post Type: TTFB 0.9s, 55 queries (adds +0.3s) ← OFFENDER + Analytics: TTFB 1.1s, 68 queries (adds +0.2s) ← OFFENDER + Contact Form: TTFB 1.2s, 87 queries (adds +0.1s)
SELECT SUM(LENGTH(option_value)) as autoload_size
FROM wp_options WHERE autoload='yes';
SELECT SUM(LENGTH(option_value)) as autoload_size
FROM wp_options WHERE autoload='yes';
SELECT SUM(LENGTH(option_value)) as autoload_size
FROM wp_options WHERE autoload='yes';
SELECT option_name, LENGTH(option_value) as size, autoload
FROM wp_options
WHERE autoload = 'yes'
ORDER BY LENGTH(option_value) DESC
LIMIT 20;
SELECT option_name, LENGTH(option_value) as size, autoload
FROM wp_options
WHERE autoload = 'yes'
ORDER BY LENGTH(option_value) DESC
LIMIT 20;
SELECT option_name, LENGTH(option_value) as size, autoload
FROM wp_options
WHERE autoload = 'yes'
ORDER BY LENGTH(option_value) DESC
LIMIT 20;
# Check PHP memory limit
php -i | grep "memory_limit" # Check OPcache -weight: 500;">status
php -i | grep -i opcache # Check PHP-FPM config
grep -E "^(pm|listen)\s*=" /etc/php/8.1/fpm/pool.d/www.conf
# Check PHP memory limit
php -i | grep "memory_limit" # Check OPcache -weight: 500;">status
php -i | grep -i opcache # Check PHP-FPM config
grep -E "^(pm|listen)\s*=" /etc/php/8.1/fpm/pool.d/www.conf
# Check PHP memory limit
php -i | grep "memory_limit" # Check OPcache -weight: 500;">status
php -i | grep -i opcache # Check PHP-FPM config
grep -E "^(pm|listen)\s*=" /etc/php/8.1/fpm/pool.d/www.conf
// In wp-config.php
define('DISABLE_WP_CRON', true); // In system crontab (runs every 5 minutes)
*/5 * * * * -weight: 500;">curl -s https://yoursite.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
// In wp-config.php
define('DISABLE_WP_CRON', true); // In system crontab (runs every 5 minutes)
*/5 * * * * -weight: 500;">curl -s https://yoursite.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
// In wp-config.php
define('DISABLE_WP_CRON', true); // In system crontab (runs every 5 minutes)
*/5 * * * * -weight: 500;">curl -s https://yoursite.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
START: Is TTFB > 500ms?
│
├─ YES: Backend is slow
│ ├─ Query Monitor shows > 100 queries?
│ │ ├─ YES → Optimize database queries (see DB guide)
│ │ └─ NO → Check for slow single queries
│ │ ├─ YES → Optimize with INDEX or JOIN
│ │ └─ NO → Plugin impact test
│ │
│ └─ Autoload size > 2MB?
│ ├─ YES → Reduce wp_options autoload
│ └─ NO → Continue to Plugin test
│
└─ NO: Backend is OK ├─ TTFB - Measure TTFB (-weight: 500;">curl or DevTools). Is it > 500ms? - Install Query Monitor. Check query count and slowest queries. - Run plugin impact test. Disable all, then -weight: 500;">enable one-by-one. - Audit autoload size. Is wp_options > 2MB? - Review PHP config. OPcache enabled? Memory limit ≥ 256MB? - Check wp_cron for stuck tasks. Consider disabling wp_cron. - Monitor external HTTP requests. Any slow API calls on page load? Once you've walked through these steps, the bottleneck becomes obvious. Then apply targeted fixes rather than guessing. Want to see this methodology in action? Check the [Performance Lab](/lab/) where we apply these diagnostics to MakeWPFast.com itself. For deeper optimization, see [WordPress Database Optimization](/wordpress-database-optimization/) and [WordPress Slow Queries](/wordpress-slow-queries/). Get WordPress Performance Tips Join developers and agency owners who get backend optimization strategies, tool releases, and deep-dive guides. Join Free No spam. Unsubscribe anytime. We respect your privacy.
START: Is TTFB > 500ms?
│
├─ YES: Backend is slow
│ ├─ Query Monitor shows > 100 queries?
│ │ ├─ YES → Optimize database queries (see DB guide)
│ │ └─ NO → Check for slow single queries
│ │ ├─ YES → Optimize with INDEX or JOIN
│ │ └─ NO → Plugin impact test
│ │
│ └─ Autoload size > 2MB?
│ ├─ YES → Reduce wp_options autoload
│ └─ NO → Continue to Plugin test
│
└─ NO: Backend is OK ├─ TTFB - Measure TTFB (-weight: 500;">curl or DevTools). Is it > 500ms? - Install Query Monitor. Check query count and slowest queries. - Run plugin impact test. Disable all, then -weight: 500;">enable one-by-one. - Audit autoload size. Is wp_options > 2MB? - Review PHP config. OPcache enabled? Memory limit ≥ 256MB? - Check wp_cron for stuck tasks. Consider disabling wp_cron. - Monitor external HTTP requests. Any slow API calls on page load? Once you've walked through these steps, the bottleneck becomes obvious. Then apply targeted fixes rather than guessing. Want to see this methodology in action? Check the [Performance Lab](/lab/) where we apply these diagnostics to MakeWPFast.com itself. For deeper optimization, see [WordPress Database Optimization](/wordpress-database-optimization/) and [WordPress Slow Queries](/wordpress-slow-queries/). Get WordPress Performance Tips Join developers and agency owners who get backend optimization strategies, tool releases, and deep-dive guides. Join Free No spam. Unsubscribe anytime. We respect your privacy.
START: Is TTFB > 500ms?
│
├─ YES: Backend is slow
│ ├─ Query Monitor shows > 100 queries?
│ │ ├─ YES → Optimize database queries (see DB guide)
│ │ └─ NO → Check for slow single queries
│ │ ├─ YES → Optimize with INDEX or JOIN
│ │ └─ NO → Plugin impact test
│ │
│ └─ Autoload size > 2MB?
│ ├─ YES → Reduce wp_options autoload
│ └─ NO → Continue to Plugin test
│
└─ NO: Backend is OK ├─ TTFB - Measure TTFB (-weight: 500;">curl or DevTools). Is it > 500ms? - Install Query Monitor. Check query count and slowest queries. - Run plugin impact test. Disable all, then -weight: 500;">enable one-by-one. - Audit autoload size. Is wp_options > 2MB? - Review PHP config. OPcache enabled? Memory limit ≥ 256MB? - Check wp_cron for stuck tasks. Consider disabling wp_cron. - Monitor external HTTP requests. Any slow API calls on page load? Once you've walked through these steps, the bottleneck becomes obvious. Then apply targeted fixes rather than guessing. Want to see this methodology in action? Check the [Performance Lab](/lab/) where we apply these diagnostics to MakeWPFast.com itself. For deeper optimization, see [WordPress Database Optimization](/wordpress-database-optimization/) and [WordPress Slow Queries](/wordpress-slow-queries/). Get WordPress Performance Tips Join developers and agency owners who get backend optimization strategies, tool releases, and deep-dive guides. Join Free No spam. Unsubscribe anytime. We respect your privacy. - Page takes 8 seconds to load (slow frontend rendering)
- Dashboard is sluggish (admin slowness)
- Specific pages are much slower than others (targeting problem)
- Performance degrades throughout the day (resource exhaustion)
- Site loads fine but feels laggy (perceived performance) - Backend (Server): PHP execution, database queries, PHP-FPM, memory usage
- Application: Plugin overhead, theme rendering, WordPress core processing
- Network: HTTP requests, API calls, DNS lookups
- Frontend (Browser): JavaScript execution, rendering, asset downloads
- Caching Layers: OPcache, Redis, FastCGI cache - Measure Time to First Byte (TTFB)
- Analyze database queries for slow or unnecessary queries
- Assess plugin impact through systematic testing
- Audit WordPress autoload bloat in wp_options
- Review PHP and server configuration
- Examine WordPress cron and background task execution
- Identify external HTTP requests blocking page load - Total number of queries
- Time spent in each query
- Which plugin triggered each query
- Duplicate queries
- Slow queries (>0.1s) - With all plugins active, record baseline TTFB and query count
- Disable all plugins except essential ones
- Measure again — note the improvement
- Re--weight: 500;">enable plugins one at a time
- After each re--weight: 500;">enable, measure TTFB and query count
- Identify which plugin(s) cause the largest slowdown - Memory limit: At least 128 MB, 256 MB recommended
- OPcache: Must be enabled (hit ratio >90%)
- PHP-FPM: pm.max_children appropriate for your server RAM - License verification: Premium plugins checking license on every page
- Newsletter signup: Checking subscriber lists synchronously
- Backup sync: Uploading backups during page load