Benchmarks

Numbers with their setup attached.

Performance claims without a method are marketing. Here is what we measured, how, what it does not prove, and exactly how head-to-head comparisons will be run so you can repeat them.

  • Measured: engine timings and index maintenance on a synthetic 100,000-product catalog (below).
  • Placeholder: end-to-end comparison with WordPress search, FiboSearch and YITH. We do not publish numbers we have not measured.

1 · Engine

Engine timings, synthetic 100,000-product catalog

PHP 8.3 / FPM / 128 MB, shared-style host. 100,000 products, 165,264 variations, ~38.8k terms. Averages of repeated runs; engine time only (no HTTP, no WordPress).

Source: docs/BENCHMARKS.md, php packages/engine/tests/bench.php

Category + in stock
0.49 ms
Category + brand + 2 facets + stock
0.39 ms
Multiselect (OR within, AND across groups)
0.42 ms
Price range + category + stock
0.47 ms
Search + filters + first 24 product cards
0.64 ms
Counts for five facet groups
4.42 ms
Naive full scan in PHP (baseline)
53.6 ms

Logarithmic scale · shorter is faster

QueryTime
Category + in stock0.49 ms
Category + brand + 2 facets + stock0.39 ms
Multiselect (OR within, AND across groups)0.42 ms
Price range + category + stock0.47 ms
Search + filters + first 24 product cards0.64 ms
Counts for five facet groups4.42 ms
Naive full scan in PHP (baseline)53.6 ms

2 · Keeping the index fresh

Keeping the index fresh, 100,000 products

Rebuilding everything on every price change would not survive an ERP sync. Patches and deltas write only what changed.

measured

6.1s

Full rebuild

peak memory about 57 MB

measured

178ms

Price/stock patch, 2,000 changes

writes 0.9 MB instead of 41 MB

measured

93ms

Edit delta, 300 edited + 100 new products

layered queries stay at 14 to 27 ms

measured

3.1s

Google Merchant feed, parent-only, 100,000 items

about 32,000 items per second, 43 MB of XML, flat memory (engine writer reading the index, PHP 8.3 CLI)

measured

6.4s

Google Merchant feed, one item per variation, 239,692 items

about 37,000 items per second, 129 MB of XML; 100,000 parents with 159,758 variations, flat memory

3 · Head-to-head

End to end on the same server and catalog

Placeholder section. 4 comparison rows are waiting for measurements. The bars on the right are deliberately empty hatching, not results.

Protocol

Protocol: identical WordPress + WooCommerce install on one MariaDB host, 100,000 products, warm and cold cache; time to first byte of the search request as the browser sees it; p50 and p95 over 200 requests per query after a warm-up; queries: a 3-letter prefix, a full product title, a SKU, a typo, a category + brand filter.

Feature, price and licensing comparisons that are already verified, with no speed claims: SearchWP, FiboSearch and the full compare table.

We will publish the raw numbers, the catalog generator and the scripts, and invite the plugin authors to review the setup. If a competitor looks better in your own test, we want to know.

Searchmaker placeholder
to be measured
WordPress / WooCommerce default search placeholder
to be measured
FiboSearch placeholder
to be measured
YITH AJAX Product Filter placeholder
to be measured

Logarithmic scale · shorter is faster

What these numbers do not prove

  • Engine timings exclude the web server and network; end-to-end figures are measured separately (below).
  • Synthetic catalogs are not proof for every real shop; we publish the script so you can run it on your own data.
  • Cold-request and concurrency tests are still being added.

Run it yourself

Engine benchmarks are reproducible with the scripts shipped in the engine package. Until the repository is public we will send you the benchmark scripts on request, together with the synthetic catalog generator, so you can compare on hardware you trust.