Hyvä is faster than Luma – everyone says so. But by how much, on what metrics, and does it translate to business results? I ran controlled benchmarks on identical hardware with the same Magento 2.4.8 installation and both themes, measuring LCP, TTFB, Lighthouse scores, and load test results with k6. The numbers are concrete.
Test setup
- Magento 2.4.8, PHP 8.4, OpenSearch 2.x, Redis cache/FPC/session
- Same product catalogue (2,500 SKUs), same server (8 vCPU, 16GB RAM)
- Varnish FPC enabled for both themes
- Lighthouse tested with Chrome DevTools, mobile preset, 3 runs averaged
- k6 load test: 50 concurrent users, 5 minutes, product page + category page
- No third-party analytics scripts
Lighthouse scores
| Metric | Luma | Hyvä | Improvement |
|---|---|---|---|
| Performance | 28 | 91 | +225% |
| LCP (mobile) | 4.8s | 1.4s | 3.4x faster |
| FCP (mobile) | 3.2s | 0.9s | 3.6x faster |
| TBT (mobile) | 1,840ms | 120ms | 15x lower |
| CLS | 0.08 | 0.02 | 4x better |
| JavaScript bundle | ~1.2MB | ~95KB | 12x smaller |
| CSS bundle | ~380KB | ~28KB | 13x smaller |
TTFB with Varnish (cached pages)
# Testing with Varnish FPC enabled (production scenario) # Apache Bench: 1000 requests, 50 concurrent ab -n 1000 -c 50 https://magento-luma.test/catalog/product/view/id/42 # Luma (Varnish HIT): # Requests per second: 312 # Time per request: 160ms # Transfer per request: 42KB (HTML) ab -n 1000 -c 50 https://magento-hyva.test/catalog/product/view/id/42 # Hyvä (Varnish HIT): # Requests per second: 847 # Time per request: 59ms # Transfer per request: 18KB (HTML - 57% smaller)
k6 load test
// k6 test script - simulates real user browsing
import http from 'k6/http';
import { sleep, check } from 'k6';
export const options = {
vus: 50,
duration: '5m',
};
export default function () {
// Realistic user journey: home -> category -> product
const home = http.get('https://magento.test/');
check(home, { 'home status 200': r => r.status === 200 });
const category = http.get('https://magento.test/shoes.html');
check(category, { 'category status 200': r => r.status === 200 });
const product = http.get('https://magento.test/catalog/product/view/id/42');
check(product, { 'product status 200': r => r.status === 200 });
sleep(1); // think time between pages
}
# k6 results summary # LUMA (50 VUs, 5 min): # http_req_duration avg=389ms p90=720ms p99=1420ms # http_req_failed: 0.8% # iterations: 3,621 # HYVÄ (50 VUs, 5 min): # http_req_duration avg=142ms p90=280ms p99=510ms # http_req_failed: 0.1% # iterations: 9,847 (+172% throughput)
What drives the difference
| Factor | Luma | Hyvä |
|---|---|---|
| JavaScript files loaded | 47+ RequireJS modules | 1 Alpine.js bundle (15KB) |
| CSS approach | Full LESS compiled CSS | Tailwind JIT (only used classes) |
| HTML size (product page) | ~42KB | ~18KB |
| Render-blocking resources | Several JS bundles | Minimal (defer/async) |
| KnockoutJS binding | On every page load | Not used |
Business impact – conversion context
Google's data on Core Web Vitals and conversion: - Each 100ms improvement in LCP correlates with ~1% conversion uplift - Our LCP improvement: 4.8s -> 1.4s = 3.4s improvement = 34% potential conversion gain Google Search ranking: - Core Web Vitals are a ranking signal since 2021 - Luma score 28 = "Poor" (red in Google Search Console) - Hyvä score 91 = "Good" (green) - Sites in "Good" range get a small but consistent ranking boost Bounce rate correlation (industry data): - Pages loading > 3s: 53% of mobile visitors leave - Pages loading < 1s: 8% bounce rate - Our LCP went from 4.8s to 1.4s - directly in the target range
Summary
The numbers confirm what the community has been saying: Hyvä is not marginally faster, it is categorically different. A Lighthouse score of 91 vs 28 means passing Google's Core Web Vitals threshold. LCP of 1.4s vs 4.8s means the majority of mobile visitors no longer leave before the page loads. The 12x smaller JavaScript bundle is not an abstraction - it is 1.1MB less code the user's device must download, parse, and execute on every page load. The investment in Hyvä pays for itself in organic traffic and conversion.
