The fastest WooCommerce theme demo we measured in October 2026 is GeneratePress's Shop site: a median Lighthouse mobile score of 88, 66 KB of JavaScript and 266 DOM elements per page. Shoptimizer's demo came second at 82. XStore's came last at 29, with about 1 MB of JavaScript and 2.7 seconds of main-thread blocking. These are the vendors' own showcase stores, each tested three times on its homepage, its shop page and one product page on 18 October 2026.
Field data from real Chrome users mostly agrees for the themes it covers. Blocksy, Kadence and GeneratePress sites pass Core Web Vitals at 49.7% to 50.3% on mobile; Astra, OceanWP and Divi sites sit between 40.0% and 41.4%. The ranking still says less about themes than it appears to. On five of the ten demos the largest single block of JavaScript is Google Tag Manager, and the theme's own scripts range from 2 KB to 257 KB. Whether a store ends up fast depends mostly on what gets installed on top of the theme.
Ten demo stores ranked by lab score
Each line is the median of the home, shop and product medians on Lighthouse's simulated mid-range phone: performance score, Largest Contentful Paint (LCP), Total Blocking Time (TBT), JavaScript transferred and DOM size. The version is the one the demo was running.
- GeneratePress 3.6.1, Site Library “Shop”: score 88, LCP 3.6 s, TBT 65 ms, 66 KB of JS, 266 DOM elements
- Shoptimizer 2.9.9 release candidate: 82, LCP 4.2 s, TBT 3 ms, 73 KB, 1,854 elements
- Blocksy 2.1.29, “Modern Shop” starter site: 74, LCP 4.5 s, TBT 91 ms, 98 KB, 689 elements
- Flatsome 3.20.11, “Classic Shop”: 71, LCP 7.2 s, TBT 161 ms, 315 KB, 1,922 elements
- WoodMart 8.6.4, default prebuilt site: 67, LCP 4.6 s, TBT 552 ms, 382 KB, 2,053 elements
- Kadence 1.4.2, “Mega Store” starter: 63, LCP 6.6 s, TBT 0 ms, 118 KB, 921 elements
- OceanWP 4.1.4, “Store” demo: 55, LCP 11.7 s, TBT 230 ms, 274 KB, 1,314 elements
- Porto 6.3.0, “Shop 4”: 43, LCP 10.1 s, TBT 532 ms, 420 KB, 2,756 elements
- Astra 4.13.8, Brandstore starter built in Elementor: 38, LCP 13.7 s, TBT 891 ms, 853 KB, 973 elements
- XStore 9.7.8, “XStore Elementor Demo”: 29, LCP 11.6 s, TBT 2,671 ms, 1,046 KB, 3,409 elements
Read it in tiers rather than places. GeneratePress and Shoptimizer are the top pair, six points apart, which is inside this dataset's noise. Blocksy, Flatsome, WoodMart and Kadence fill an 11-point middle band whose order could reshuffle on a rerun, with OceanWP alone below it at 55. Porto, the Astra demo and XStore are clearly behind.
One result cuts across all ten. No demo's median LCP made Google's 2.5-second threshold: GeneratePress came closest at 3.6 s, and the only individual page under the line was WoodMart's homepage at 1.5 s.
Where each demo's JavaScript comes from
Splitting every script request by its URL path shows who wrote the code. The theme's own files, counting the companion plugin sold with it such as GP Premium or Kadence Pro, came to this many KB per page: Shoptimizer 2, GeneratePress 6, Astra 8, Kadence 11, Blocksy 17, Flatsome 36, OceanWP 74, WoodMart 103, Porto 117 and XStore 257. Astra is third-lightest on that list and ninth in the ranking.
The difference is what each vendor put on its showcase. Analytics and marketing tags (Google Tag Manager, Google Analytics and, on the Astra demo, the Facebook pixel) were the largest single source on five demos: 572 KB on the Astra demo, 323 KB on XStore, 183 KB on Flatsome, 178 KB on WoodMart and 159 KB on Porto. The GeneratePress, Shoptimizer, Blocksy, Kadence and OceanWP demos load no tags at all. Page builders and sliders added 349 KB on XStore, from Elementor, Slider Revolution and PRO Elements, and Elementor added 97 KB on OceanWP and 94 KB on Astra.
Take the tags away and the field narrows. WoodMart's demo would carry roughly 200 KB of JavaScript and Flatsome's roughly 130 KB. That is still two to three times what GeneratePress and Blocksy load, but a long way from the nearly sixfold gap in the raw totals. Your store will have its own tags. Budget for them separately from the theme.
A script delayed until the first tap or scroll never loads during a Lighthouse run. WP Rocket's Delay JavaScript Execution setting works that way, and four demos run WP Rocket; we did not check which of them enable the setting. Delayed code still runs once a shopper touches the page, which is when INP is measured, so a low lab JavaScript figure describes loading, not interaction.
CrUX field data for the six themes it detects
The second lens has nothing to do with the demos. The HTTP Archive Core Web Vitals Technology Report groups every WordPress origin it detects by theme and joins it to Chrome UX Report (CrUX) data from real visits. Share of origins passing all three Core Web Vitals on mobile in September 2026, then the share with good LCP, INP and CLS:
- Blocksy: 50.3% of 23,072 origins (LCP 56.1%, INP 88.3%, CLS 91.6%)
- Kadence: 49.8% of 35,642 (58.3%, 88.9%, 88.6%)
- GeneratePress: 49.7% of 57,964 (62.3%, 85.7%, 85.0%)
- Divi: 41.4% of 150,144 (48.5%, 94.5%, 81.0%)
- OceanWP: 40.5% of 31,388 (44.2%, 92.9%, 90.7%)
- Astra: 40.0% of 168,423 (44.3%, 89.3%, 90.8%)
All WordPress sites pass at 48.3% in the same month and WooCommerce stores at 39.3%, as set out in our WooCommerce Core Web Vitals statistics. These samples are large: at 23,072 origins the margin of error is about ±0.7 points. The top three are tied with each other and about nine points clear of the bottom three, and LCP carries most of that gap.
INP runs the other way. Divi sites have the best interaction scores of the six, 94.5% good, and GeneratePress the worst at 85.7%, which is the reverse of what lab TBT would predict. Divi also passes less often on desktop (31.2%) than on mobile, because only 49.3% of Divi origins have good desktop CLS. A lab test of a demo would show neither.
Where the lab ranking and the field data disagree
Both lenses put GeneratePress and Blocksy near the top and Astra and OceanWP near the bottom. Kadence is the exception: sixth of ten in the lab at 63, yet tied for first in the field. Its demo's product page loads Google reCAPTCHA, 347 KB of script from gstatic.com, which makes the product page's JavaScript 479 KB against 78 KB on the shop page. That was the demo builder's choice, and the field row does not inherit it.
The field rows have their own distortions. Divi's row includes the Divi Builder running on other themes, because the report files Divi as theme, plugin and builder at once. Astra's row cannot separate a bare Astra site from one with Elementor on top. And the people who choose GeneratePress or Blocksy may be the same people who pay for better hosting. These are correlations.
What the numbers mean for six popular store themes
WoodMart
WoodMart's demo loads 103 KB of its own JavaScript plus 178 KB of tags across 219 requests, the most of any demo. Its LCP is bimodal, about 1.5 s or about 5 s on every template, which is how the shop page ran 64, 89 and 67. The 552 ms TBT is the figure that matters for interaction. The WoodMart speed optimization guide works through the theme's own settings. Against its usual rivals, see WoodMart vs Flatsome and WoodMart vs Shoptimizer.
Flatsome
Four points ahead of WoodMart, which is a tie. Flatsome's own scripts weigh 36 KB, and 183 KB of the demo's 315 KB is tags. Its homepage scored 86, 49 and 55 in three runs half an hour apart, with LCP at 3.8, 9.1 and 9.0 s. Flatsome speed optimization covers the UX Builder side, and Flatsome vs Astra sets it against Astra, the most widely detected theme in this report at 168,423 origins.
Astra
Astra's 38 is not Astra's. The Brandstore starter is built in Elementor and carries 572 KB of tags and 538 KB of fonts, 350 KB of them from Google Fonts, and its LCP element is an Elementor text block. Astra's own JavaScript is 8 KB. A store running Astra with Elementor inherits the Elementor half of that, which is why Elementor makes WooCommerce slow more often than the theme does. Astra speed optimization gives the order to check things in.
Porto
Porto's demo took 2.2 seconds to answer every request, with Cloudflare reporting the page as uncached (cf-cache-status: DYNAMIC). That server time sets a floor under every other timing, so the 43 reflects the demo's hosting more than Porto's 117 KB of theme JavaScript or its 2,756-element DOM, the second-largest measured. See Porto speed optimization.
XStore
The heaviest demo by a distance: 257 KB of theme JavaScript, 349 KB of Elementor and Slider Revolution, 323 KB of tags, 3,409 DOM elements and 2.7 s of TBT. Its product page produced no LCP at all in two of four runs. It is served from a single server in Germany with no CDN, so a US shopper would wait longer for the first byte than our test machine in Spain did. WoodMart vs XStore compares the two multipurpose themes directly.
Divi
Elegant Themes publishes layout previews, not a store you can click through from homepage to product, so Divi has no lab row. Its field row is 41.4% on mobile, with the best INP and the weakest CLS of the six. Divi speed optimization covers what to change on a Divi store.
Why a gap under 10 points means nothing here
Three runs give a median, not a confidence interval. Across the 30 URLs, the median gap between a page's best and worst run was 9 points. Flatsome's homepage swung by 37 and WoodMart's shop page by 25. The CPU benchmark Lighthouse records with each run ranged from 1,008 to 2,212 during the session, because the test machine was doing other work at the same time, and simulated TBT scales with it.
GeneratePress over Shoptimizer, or Flatsome over WoodMart, is a coin toss on this data. GeneratePress over XStore is not.
What this test leaves out
Storefront, WooCommerce's own theme, has no demo. Its WooCommerce.com listing carries an empty demo URL, and the only preview is a blog with no products. Divi has no store demo either, and neither was substituted. WoodMart, Flatsome, Shoptimizer, XStore and Porto are not detected by the HTTP Archive report, so for those five the lab figure is the only one here.
Everything ran from one machine in Spain, with Cloudflare answering from its Madrid edge; nothing was measured from the US. Shoptimizer's demo ran a release-candidate build rather than a shipped version. And lab TBT is not INP. TBT counts main-thread work while the page loads, INP measures the response to real taps, and Google ranks on the field figure.
Method
Lighthouse 12.6.1 in headless Chrome 153, performance category only, mobile form factor and default simulated throttling: 150 ms round trip, 1.6 Mbps throughput, 4× CPU slowdown and a Moto G Power screen. Each of the 30 URLs (homepage, main shop archive and one product linked from the homepage, per theme) ran three times between 11:00 and 11:32 UTC on 18 October 2026. Runs were interleaved so one slow minute on a host could not land on all three runs of a page. Reported values are per-metric medians, then the median of the three templates.
Two runs failed and got one replacement each: a Chrome interstitial on GeneratePress's homepage, and an XStore product run with no LCP that failed again on retry, so that page is the median of two runs. Demo URLs came from each vendor's own site; from starter-site libraries we took the generic store starter. The script breakdown assigns every Script request to a source by URL path. CrUX figures come from the keyless API at cdn.httparchive.org/v1 for the September 2026 dataset. The raw Lighthouse reports, the scripts and every CSV are kept with the study.
Choosing a theme for a store you are about to build
If speed decides it and the store is an ordinary catalogue, start from GeneratePress, Blocksy or Kadence on the block editor. Their demos load 66 to 118 KB of JavaScript, and their field rows lead the six themes measured. Shoptimizer belongs in that group on lab evidence alone. Do not buy XStore for speed: its demo has the heaviest JavaScript, the largest DOM and the longest TBT of the ten, and no field data offsets that because none exists.
WoodMart or Flatsome makes sense when you need their built-in shop features, and the four points between them settle nothing. What moves a store's number more than the theme is the list this study kept running into: a page builder, a slider, a tag manager on every page and a font set pulled from Google. A store that adds all four to GeneratePress will not keep the 88. WoodMart's own homepage scored 84 with its tags still loading; its shop and product templates are where it lost points.
None of this applies once a store is live and has CrUX data of its own. At that point the demo is irrelevant. Check the origin in PageSpeed Insights or our store speed check, and change themes only when the field report points at the template rather than at hosting, images or scripts.