Skip to content

WordPress and kitloom on the same database: a benchmark ​

kitloom serves a site from its WordPress database: the same wp_posts, the same terms, the same comments. So a fair question is whether the same content comes back faster through Laravel than through WordPress. We measured it: one database, the same records, identical containers, thirteen typical pages.

The setup ​

A fresh WordPress filled with the Theme Unit Test data and generated content — 10,000 posts in 118 categories, 50,000 comments, 20 authors — exported as WXR and imported into an empty kitloom. Both sites read the same records from one MySQL 8 server.

Four sites took part:

  • WordPress with its default theme and no plugins;
  • WordPress + plugins: Yoast SEO, Contact Form 7 and WooCommerce, as many WordPress sites run;
  • kitloom, lean: what a bare WordPress has — posts, pages, media, menus, widgets, comments, the REST API, a form module, the Blade theme;
  • kitloom, full: the whole Filament skeleton, about a hundred packages with every module and the admin.

Each runs PHP 8.4 under PHP-FPM with OPcache, behind nginx, and each page was loaded for ten seconds over one connection and then over eight, in three rounds. No page cache on either side for the main numbers: every page is built from the database.

The numbers ​

The median time of one page over one connection, and pages per second over eight:

PageWordPressWordPress + pluginskitloom, leankitloom, full
Home17 ms · 377/s36 ms · 193/s11 ms · 587/s20 ms · 333/s
Post13 ms · 496/s31 ms · 218/s10 ms · 609/s20 ms · 363/s
Post with 2,167 comments248 ms · 30/s303 ms · 24/s171 ms · 42/s201 ms · 35/s
Category16 ms · 371/s34 ms · 189/s14 ms · 460/s23 ms · 305/s
Search43 ms · 126/s83 ms · 87/s54 ms · 131/s64 ms · 112/s
All 13 pages19.6 ms · 327/s43 ms · 158/s14.7 ms · 395/s25 ms · 254/s

It ran on one laptop (an M4 Pro under Docker Desktop), so read the ratios rather than the milliseconds: the rounds were 3–9 % apart, and the ratios held across runs.

What stands out ​

Like for like, kitloom is faster. With what a bare WordPress has, kitloom answers in 14.7 ms against 19.6 ms across the thirteen pages and serves 1.2 times as many pages a second. A post runs 18 SQL queries against WordPress's 25: menus are built only for the places a page draws them, so a migrated site with a dozen forgotten menus does not pay for them.

Plugins cost WordPress more than packages cost kitloom. Three plugins more than double WordPress's time for a post, 13 → 31 ms. Everything the full kitloom skeleton adds to the lean one — about ninety packages and the admin — costs about 10 ms a page, most of it starting them. The full kitloom still comes in at 25 ms against 43 ms for WordPress with its plugins, 1.6 times as many pages a second.

WordPress still wins search. 43 ms against 54–64 ms. Both look for the words with LIKE '%…%' in every post's HTML, which no index can serve. WordPress reads the posts once and asks MySQL how many rows it found; kitloom reads them twice, once to count the results for the page links and once for the page, the way Laravel paginates on every database it supports. On ten thousand posts that is the whole difference; a site with a few thousand pays a few milliseconds, and a large one that needs fast search gives kitloom/search Meilisearch or Typesense.

Redis helps WordPress, not kitloom. WordPress keeps posts, terms and query results in its object cache, so Redis takes most of its SQL away and makes search three times faster. kitloom reads only its settings and a few small lists from the cache: with Redis its pages came out the same as with files.

With a page cache ​

Both sides can keep finished pages. WordPress with a page-cache plugin and kitloom with its stored page sent before Laravel starts come back in the same 0.2 ms — around 20,000 pages a second. Sent through Laravel instead, a stored kitloom page costs the framework's start: 1.4 ms on the lean site, 7 ms on the full skeleton. kitloom also keeps search results, which the plugin does not.

Try it on your own data ​

Numbers from someone else's laptop are a starting point. The benchmarks page has every table, the versions, the content and how each figure was taken, and the advice for a live site: php artisan optimize on every deploy, the page cache on, and the modules a site does not use left out.

Or open a Filament or Nova demo and click around a kitloom site of your own.

Last updated:

kitloom — modules and themes for Laravel.
Pricing · Services · License · Refunds · Privacy · Community · [email protected]