MEASURED
THE PAGE A VISITOR GETS, COUNTED.
CHROMIUM · 1440 × 900 · COLD CACHE · NO SCROLLING · 15 SEPTEMBER 2026
- 413 DOM NODES
Every element on the page, counted after it settled.
- 225 REQUESTS
208 of them are Shopify’s platform layer — checkout warm-up, pixels, telemetry, the account component — which every store carries. The theme itself accounts for 17: 3 of its own files, 7 fonts, 7 images.
- 40 SCRIPT TAGS
3 of them belong to the theme. The other 37 are Shopify’s own — 34 on Shopify’s Dawn demo store, measured the same way, plus the account component the Theme Store has required since 30 July 2026 (two tags: its script and the data block Shopify renders beside it) and the cookie banner this store shows because it ships to Europe (one tag), which the demo does not carry.
- 0 of 9 IMAGES WITHOUT WIDTH & HEIGHT
Every image is declared with its dimensions before it loads, so nothing shifts when it arrives.
- 0 HOSTS OUTSIDE SHOPIFY
5 hosts in total — the store’s own domain, Shopify’s CDN, two Shopify telemetry endpoints and Shop Pay. No font service, no app, no analytics vendor.
- 2.1 MB TRANSFERRED
0.58 MB of it is the theme’s: document, CSS, JS, fonts and images. The remaining 1.5 MB is Shopify’s checkout and pixel scripts, present on every store.
PRODUCT PAGE
/products/2100-training-shirt - 441 DOM NODES
Every element on the page, counted after it settled.
- 232 REQUESTS
217 of them are Shopify’s platform layer — checkout warm-up, pixels, telemetry, the account component — which every store carries. The theme itself accounts for 15: 4 of its own files, 9 fonts, 2 images.
- 46 SCRIPT TAGS
7 of them belong to the theme. The other 39 are Shopify’s own — 36 on Shopify’s Dawn demo store, measured the same way, plus the account component the Theme Store has required since 30 July 2026 (two tags: its script and the data block Shopify renders beside it) and the cookie banner this store shows because it ships to Europe (one tag), which the demo does not carry.
- 0 of 3 IMAGES WITHOUT WIDTH & HEIGHT
Every image is declared with its dimensions before it loads, so nothing shifts when it arrives.
- 0 HOSTS OUTSIDE SHOPIFY
6 hosts in total — the store’s own domain, Shopify’s CDN, three Shopify telemetry endpoints and Shop Pay. No font service, no app, no analytics vendor.
- 2.0 MB TRANSFERRED
0.42 MB of it is the theme’s: document, CSS, JS, fonts and images. The remaining 1.6 MB is Shopify’s checkout and pixel scripts, present on every store.
AGAINST DAWN, AND AGAINST TWO LIVE DAWN STORES
Three columns of comparison. Dawn with nothing installed: Shopify’s own public demo store for
the theme, measured with the same script on 15 September 2026. Then two real Shopify stores running Dawn
— one on a Dawn-derived copy — measured the same way on 9 September 2026; they are not named and not
linked, they belong to someone else, and both are shown, not only the more drastic one.
The script tags are split, because a total alone reads against the theme. Shopify’s own share
is 34 on the homepage and 36 on the
product page of the Dawn demo; Dolerite Blank carries three more —
the account component the Theme Store has required since 30 July 2026 (two tags: its script and the data block Shopify renders beside it) and the cookie banner this store shows because it ships to Europe (one tag) — which the demo does not ship. Everything above that is the theme, and
everything above the theme is what a store installs.
The account component is not free. Against the run of 12 September 2026, before it was placed, the
homepage carries 45 more requests and
0.41 MB more — Shopify’s account scripts
(41 KB), Sign in with Shop and the Shop app’s own two fonts
(129 KB), and the sign-in frame it opens. The product page
moves by 43 requests and
0.39 MB. It is Shopify’s, it sits on every theme
that meets the requirement, and it is on this page because the number moved. The earlier run
stays published beside the new one.
| Dolerite Blank homepage | Dolerite Blank product page | Dawn demo homepage | Dawn demo product page | Store A Dawn copy | Store B Dawn |
| DOM nodes | 413 | 441 | 1,425 | 1,355 | 4,800 | 2,407 |
| Script tags | 40 | 46 | 49 | 59 | 65 | 61 |
| of which the theme | 3 | 7 | 15 | 23 | — | — |
| of which Shopify | 37 | 39 | 34 | 36 | — | — |
| Hosts beyond the store domain * | 3 | 4 | 2 | 4 | 24 | 19 |
| of which outside Shopify | 0 | 0 | 0 | 0 | ≥ 20 | ≥ 15 |
| Images without width & height | 0 of 9 | 0 of 3 | 0 of 25 | 0 of 20 | 26 | 137 of 139 |
| Transferred on load | 2.1 MB | 2.0 MB | 1.8 MB | 2.1 MB | — | 30.8 MB |
HOW IT WAS MEASURED
In Chromium at 1440 × 900 with a cold cache, on the page a visitor gets — after the load event,
network idle and five more seconds for Shopify’s own beacons, without scrolling. No Lighthouse,
no synthetic score: five expressions in the console, run on 15 September 2026. Open the store, open
DevTools, paste them on the same pages. Your numbers will move by a few of Shopify’s beacons; the
shape will not.
document.querySelectorAll('*').length
performance.getEntriesByType('resource').length
document.scripts.length
[...document.images].filter(i => !i.getAttribute('width') || !i.getAttribute('height')).length
new Set(performance.getEntriesByType('resource').map(r => new URL(r.name).host).filter(h => !h.includes('myshopify.com') && !h.includes('shopify.com') && !h.includes('shopifycdn'))).size
RAW RUNS, EVERY REQUEST LISTED: dolerite-blank-2026-09-15.json
· dawn-demo-2026-09-15.json
· dolerite-blank-2026-09-12.json
What these numbers don’t say: a DOM node count is not a speed score, and neither page carries a
Lighthouse figure here — that is a different measurement with its own variance. They say how much
markup, script and third-party surface a visitor receives before a single app is installed.