How fast is WordPress on Cloudflare Workers?
Where the Worker runs matters more than anything else. With the database in US East, the WooCommerce home page took 19.6 s of PHP time when the Worker ran near the visitor in Singapore, and 2.9 to 3.2 s when it ran next to the database, which is what hostlesswp sets up. A direct database connection instead of Hyperdrive brought the same page to 0.19 s; that path is not in hostlesswp yet. Pages for logged-out visitors come from the page cache and skip PHP entirely.
Results
PHP processing time per page, warm requests, including database waits. Measured October 13 and 14, 2026.
| Configuration | Per query | Core home page (29 queries) | WooCommerce home page (74 queries) |
|---|---|---|---|
| Default placement (Worker in Singapore) | ~230 ms | 7.7 s | 19.6 s |
Next to the database (placement.region = "aws:us-east-1", the hostlesswp default) | ~33 ms | 1.2 to 1.3 s | 2.9 to 3.2 s |
| Next to the database, direct TCP to MySQL instead of Hyperdrive not shipped | ~2 ms | 0.07 s | 0.19 s |
Small samples: treat these as orders of magnitude, not guarantees. Medians of 1 to 5 warm samples per cell; cold starts excluded.
Setup
- WordPress 7.1.3, PHP 8.3 (php-wasm 3.1.57, JSPI build) with OPcache in shared memory and precompiled scripts.
- Database: managed MySQL 8.0.36 in US East (Virginia), reached through Cloudflare Hyperdrive with caching disabled.
- Requests were sent from a second Worker through a Service Binding, not from a laptop, so the tester's internet path is not in the numbers. Most requests entered Cloudflare in Singapore.
- Each configuration: 5 rounds of 5 pages in sequence, then 4 rounds with 4 requests in parallel.
- "Per query" is the median round trip of
SELECT 1, measured from inside the Worker.
What we found
Distance multiplies
WordPress runs its queries one after another, so with default placement every page paid the trans-Pacific round trip dozens of times. Placing the Worker next to the database made pages about 6 times faster, so hostlesswp does it by default.
Hyperdrive adds about 30 ms a query
In the same Worker invocation, a direct SELECT 1 took 2 ms and opening the connection 2 to 7 ms, against about 33 ms through Hyperdrive. We could not tell whether that is the distance to Hyperdrive's pool or its own processing.
Why direct is not shipped
The direct connection was measured over plaintext, because the test database used a private certificate authority that the Workers TLS client does not accept. It needs a TLS fix before it can ship.
More cold starts near the database
With placement next to the database, new instances started more often: 11 to 16 cold starts in 25 sequential requests, against 0 with default placement. Why is not known yet. The page cache hides this from logged-out visitors.
Paging got cheaper
SQL_CALC_FOUND_ROWS paging first needed five round trips through Hyperdrive. Running the count in parallel brought the REST posts list from about 2.5 s to 1.6 s.
Cached pages skip all of this
Visitors who are not logged in and have no cart get pages from Workers KV without starting PHP or touching the database.
Plugin test method
Each of the 30 most-installed plugins (WordPress.org plugins API, October 12, 2026) was deployed on its own, activated from the admin, then the front page, the dashboard and the plugin's own admin pages were opened. A plugin counts as working when all of them load without a PHP fatal error or a platform limit. WooCommerce (checkout end to end, 14 steps), Elementor, Yoast SEO, Contact Form 7 and Rank Math also had their main flows tested. Results: compatibility.
The same write-up is in the repository as docs/BENCHMARKS.md. If you measure your own site, we would like to see the numbers.
Measure your own site
After deploying, hostlesswp requests your home page and reports its PHP time and query count.