WordPress Admin
Dashboard Slow?
Every click takes 3 seconds. Saving a post feels like dial-up. It's not your hosting. It's what's running inside wp-admin.
Why wp-admin Feels Slow
Your frontend might be fast—cached, CDN-delivered, optimized. But wp-admin bypasses all of that. Every admin page is generated fresh by PHP, runs its own set of database queries, and loads every active plugin's admin hooks.
The frontend loads in 1.2 seconds. The admin dashboard takes 6+ seconds. You upgrade hosting. It helps for a week. Then it's slow again.
Caching plugins don't help here—they intentionally skip admin pages. CDN doesn't help—admin is dynamic. The slowness comes from inside WordPress itself.
Why Common WordPress Admin Speed Tips Don't Work
- "Upgrade your PHP version"
- "Switch to better hosting"
- "Install a caching plugin"
- "Disable plugins you don't use"
- "Increase memory limit"
- One plugin's admin_init callback takes 800ms
- Heartbeat API fires every 15 seconds
- Admin-ajax.php handles 12 concurrent requests
- 2MB of autoloaded data on every request
- A slow query runs on every admin page
Generic advice isn't wrong—it's just not specific enough. You don't need to "disable plugins." You need to know which plugin, which hook, and which function is the bottleneck.
4 Real Causes of Slow WordPress Admin Performance
1. admin-ajax.php Bottleneck
WordPress routes all AJAX requests through a single file: admin-ajax.php.
Every request bootstraps the entire WordPress stack. If 5 plugins make AJAX calls
on the dashboard, that's 5 full WordPress loads happening simultaneously.
# Check admin-ajax traffic in your browser:
# DevTools → Network → Filter "admin-ajax"
# Look at how many requests fire on a single page load
2. Heartbeat API Overhead
WordPress Heartbeat sends an AJAX request every 15–60 seconds to check for autosaves, post locks, and notifications. Each request loads the full WordPress stack. On shared hosting, this alone can saturate your PHP workers.
// Slow down heartbeat to reduce load:
add_filter('heartbeat_settings', function($settings) {
$settings['interval'] = 120; // seconds (default: 15-60)
return $settings;
});
3. Slow Plugin Callbacks on admin_init
Plugins hook into admin_init, admin_menu, and
admin_enqueue_scripts. These run on every admin page,
not just the plugin's own settings page. A single poorly-written callback can
add 500ms+ to every admin request.
4. Autoload Bloat
The same wp_options autoload query that affects your frontend also
runs on every admin page. But admin pages are never cached, so you feel the
full impact every time. Read the full autoload guide.
How to Diagnose
- Open DevTools on any admin page — Go to Network tab. Note the main page load time, then count admin-ajax requests. If you see 5+ AJAX calls, that's 5 full WordPress bootstraps.
-
Time admin_init hooks — Add
SAVEQUERIEStowp-config.phpand check which functions run on admin_init. Sort by execution time to find the slow ones. - Deactivate plugins one at a time — Measure admin page load after each deactivation. When it gets fast, you found the culprit. This is tedious but definitive.
- Check database query count — A healthy admin page should run 50–100 queries. If you're seeing 300+, plugins are adding unnecessary queries to every admin page. See our slow queries guide for how to track these down.
-
Monitor Heartbeat frequency — In DevTools, watch
the Network tab for 60 seconds. Count how many
admin-ajax.phprequests fire. Each one is a full PHP request.
How to Speed Up WordPress Admin Dashboard
Reduce Heartbeat Frequency
Changing Heartbeat from 15s to 120s cuts background admin-ajax requests by 87%. Most sites won't notice any difference in functionality.
Disable Dashboard Widgets
Every dashboard widget runs its own queries on page load. Remove widgets from plugins you don't check daily:
add_action('wp_dashboard_setup', function() {
remove_meta_box('dashboard_quick_press', 'dashboard', 'side');
remove_meta_box('dashboard_primary', 'dashboard', 'side');
// Remove plugin widgets that make external API calls
});
Add Object Caching
Redis or Memcached dramatically improves admin performance because admin pages are query-heavy and never page-cached. Database lookups that run on every admin page get served from memory instead.
Why wp-admin Gets Slower Over Time
Admin slowness is a death by a thousand cuts. No single plugin is the villain. It's the accumulation of:
- 15 plugins each adding 50ms to admin_init = 750ms baseline
- Dashboard widgets making external API calls on every load
- AJAX handlers running full WordPress bootstrap for trivial tasks
- Autoloaded data growing 100KB per month from plugin churn
You can't fix what you can't see. You need per-callback timing —not just "which plugin is slow" but "which function in which plugin takes how long on which hook."
Find Your Admin Bottleneck
WP Multitool's Slow Callback Finder times every hook callback in wp-admin and ranks them by execution time. Find the exact function that's costing you 800ms—not just the plugin name.
Get WP Multitool Slow Queries Guide