WooCommerce / Performance
WooCommerce performance problems
WooCommerce stores slow down in ways a brochure site never does: carts, checkouts and account pages cannot be page-cached, orders grow the database every day, and background jobs compete with customers for the same PHP workers.
Short answer
Measure server response time for the slow requests first, not page-speed scores. Then find where that time goes: database queries, PHP execution, external HTTP calls or waiting for a free PHP worker. Cart, checkout and account pages cannot be page-cached, so their speed depends on PHP, the database, the object cache and background jobs.
Technical resources
Performance guides
- WooCommerce / Performance WooCommerce Action Scheduler Problems Past-due, failed and stuck scheduled actions: how the queue runs, why it stalls and how to fix it without losing pending work.
- WooCommerce / Performance WooCommerce Slow Checkout: What to Check Separate PHP execution time, database queries and external API calls before changing caching or hosting.
Specific problems
Where WooCommerce time goes
Slow checkout
Shipping, tax or ERP calls inside the checkout request; heavy hooks on order creation.
Slow queries
Large meta tables, unindexed lookups, oversized autoloaded options.
Action Scheduler backlogs
Thousands of pending or failed actions: webhooks, emails, syncs.
WP-Cron problems
Tasks that only run when someone visits, or all at once under traffic.
Saturated PHP workers
502/504 errors when slow requests occupy every worker.
Object cache missing or ineffective
No Redis or Memcached, or a cache flushed too often to help.
Measure before you optimise
Page-speed tools measure the front end of an anonymous visit to a cached page. WooCommerce slowness usually lives elsewhere: in uncached requests (cart, checkout, account, admin), in queries that grow with the order count, and in background work. Start with the server response time (TTFB) of the specific slow requests, then break it down.
| Signal | Likely bottleneck |
|---|---|
| Slow only on cart, checkout and account | PHP and database work per request, external calls |
| Slow admin orders screen | Order queries, counts, extensions adding columns |
| 502/504 under load | PHP-FPM workers exhausted by slow requests |
| Emails, webhooks or syncs running late | Action Scheduler backlog, WP-Cron not running |
| Everything slow after growth | Database size, autoloaded options, missing object cache |
What usually helps — and what doesn't
Moving external calls out of the checkout request, running heavy work through Action Scheduler, adding a persistent object cache, cleaning expired sessions and oversized options, and sizing PHP-FPM for real traffic usually make a measurable difference. Adding a second page-cache plugin, "optimising" the database with tools that delete data you don't understand, or upgrading hosting without measuring usually doesn't.
Frequently asked questions
Why is WooCommerce checkout slow?
Checkout cannot be page-cached, so every request runs PHP and database queries. The usual culprits are synchronous calls to shipping, tax or ERP services, heavy custom hooks on order creation, and a missing object cache.
What is Action Scheduler?
The background job queue WooCommerce uses for webhooks, emails, subscription renewals and many extensions. Its queue is visible under Tools → Scheduled Actions. A growing number of pending or failed actions is an early warning sign.
Should I disable WP-Cron?
On busy stores, replacing traffic-triggered WP-Cron with a real server cron job that calls it every minute is usually more reliable. Disabling it without a replacement stops scheduled work entirely.
$ describe the problem
Have a WooCommerce problem?Request a diagnosis.
Tell us what is failing, what changed recently and the business impact. We review every request and recommend the appropriate next step.
Never send passwords, API keys or card data through the form.