Speed audit: Shopify's Dawn demo store
Shopify store · theme Dawn 15.0.0 · 3 pages tested on a simulated phone
Real visitors: Google has no real-visitor data for this store yet (it needs enough Chrome visits over 28 days), so only the lab test is available.
Lab score (home page, phone): about 95 when the test starts on time, about 86 when it starts late (1 of Google's 6 runs started late). Late starts come and go on Google's machine, so the number on pagespeed.web.dev jumps between the two - here the higher one is the more common.
Biggest wins: (1) load the styles of hidden pop-ups in the background.
1. What real visitors experience
Google has no real-visitor data for this store yet. It needs enough visits from Chrome users over 28 days; small or new stores often have none. Until then the lab test below is the only measure.
2. The lab test (the PageSpeed score)
PageSpeed loads your page once at full speed, notes when the first frame was drawn, then simulates a slow phone. Anything that finished downloading before that first frame is counted as needed for it. On Google's test machine the first frame often comes a second or two late, for reasons that are not your store's fault (Shopify's own demo store does it too). Then everything downloaded meanwhile counts against you - which is why the same page can score 90 one minute and 65 the next. The fixes below are about what is downloading, and what blocks the screen, in those first two seconds.
* simulated slow-phone times, as on pagespeed.web.dev. "First frame" is the real, unsimulated moment the first frame was drawn; "late start" means it came more than 0.7 s after the page's HTML had arrived.
Home page · theme-dawn-demo.myshopify.com/
Biggest element on screen: a photo: A woman crouches while holding multiple blue handbags. HTML: 42 KB compressed (244 KB of code), built by the server in 29 ms. Requests: 274 (1758 KB). Finished by 2.3 s (what a late start would count): 1284 KB.
Google's own runs (PageSpeed Insights)
| Run | Score | First frame | Start | First content* | Main content* | Speed Index* | Done before 1st frame |
|---|---|---|---|---|---|---|---|
| 1 | 95 | 0.38 s | on time | 0.9 s | 3.0 s | 1.8 s | 398 KB |
| 2 | 86 | 1.30 s | late start | 1.8 s | 3.9 s | 3.7 s | 430 KB |
| 3 | 95 | 0.25 s | on time | 0.9 s | 3.0 s | 1.8 s | 271 KB |
| 4 | 95 | 0.27 s | on time | 0.9 s | 3.0 s | 1.7 s | 398 KB |
| 5 | 95 | 0.31 s | on time | 0.9 s | 3.0 s | 1.9 s | 273 KB |
| 6 | 95 | 0.23 s | on time | 1.1 s | 3.0 s | 1.8 s | 272 KB |
Our lab runs (Lighthouse 13.6.0, simulated slow phone)
| Run | Score | First frame | Start | First content* | Main content* | Speed Index* | Done before 1st frame |
|---|---|---|---|---|---|---|---|
| 1 | 90 | 0.31 s | on time | 1.2 s | 3.5 s | 2.6 s | 440 KB |
| 2 | 96 | 0.19 s | on time | 1.0 s | 2.7 s | 2.3 s | 278 KB |
| 3 | 96 | 0.19 s | on time | 1.0 s | 2.7 s | 2.3 s | 422 KB |
What the first frame waits for
| File | Whose | Size | Done at |
|---|---|---|---|
…demo.myshopify.com/cdn/shop/t/53/assets/component-slideshow.css | Your theme | 2 KB | 200 ms |
…wn-demo.myshopify.com/cdn/shop/t/53/assets/component-slider.css | Your theme | 3 KB | 200 ms |
…mo.myshopify.com/cdn/shop/t/53/assets/component-list-social.css | Your theme | 1 KB | 199 ms |
theme-dawn-demo.myshopify.com/cdn/shop/t/53/assets/base.css | Your theme | 12 KB | 189 ms |
…hopify.com/cdn/shop/t/53/assets/component-localization-form.css | Your theme | 3 KB | 188 ms |
Product page · …yshopify.com/products/small-convertible-flex-bag-cappuccino
Biggest element on screen: a photo: div.product-media-container > modal-opener.product__modal-opener > div.product__media > im. HTML: 54 KB compressed (346 KB of code), built by the server in 27 ms. Requests: 270 (1599 KB). Finished by 2.3 s (what a late start would count): 1151 KB.
Google's own runs (PageSpeed Insights)
| Run | Score | First frame | Start | First content* | Main content* | Speed Index* | Done before 1st frame |
|---|---|---|---|---|---|---|---|
| 1 | 91 | 0.29 s | on time | 1.1 s | 3.4 s | 2.0 s | 351 KB |
| 2 | 98 | 0.26 s | on time | 1.1 s | 2.4 s | 2.0 s | 290 KB |
Our lab runs (Lighthouse 13.6.0, simulated slow phone)
| Run | Score | First frame | Start | First content* | Main content* | Speed Index* | Done before 1st frame |
|---|---|---|---|---|---|---|---|
| 1 | 96 | 0.18 s | on time | 1.1 s | 2.7 s | 2.0 s | 318 KB |
| 2 | 98 | 0.16 s | on time | 1.1 s | 2.3 s | 2.0 s | 269 KB |
| 3 | 98 | 0.17 s | on time | 1.1 s | 2.3 s | 1.6 s | 208 KB |
What the first frame waits for
| File | Whose | Size | Done at |
|---|---|---|---|
…wn-demo.myshopify.com/cdn/shop/t/53/assets/component-slider.css | Your theme | 3 KB | 201 ms |
…mo.myshopify.com/cdn/shop/t/53/assets/component-list-social.css | Your theme | 1 KB | 199 ms |
…demo.myshopify.com/cdn/shop/t/53/assets/component-slideshow.css | Your theme | 2 KB | 196 ms |
theme-dawn-demo.myshopify.com/cdn/shop/t/53/assets/base.css | Your theme | 12 KB | 195 ms |
…rtable-wallets/latest/accelerated-checkout-backwards-compat.css | Shopify platform | 3 KB | 195 ms |
…hopify.com/cdn/shop/t/53/assets/component-localization-form.css | Your theme | 3 KB | 193 ms |
Collection page · theme-dawn-demo.myshopify.com/collections/bags
Biggest element on screen: a photo: Small Naomi. HTML: 49 KB compressed (346 KB of code), built by the server in 26 ms. Requests: 258 (1589 KB). Finished by 2.3 s (what a late start would count): 1189 KB.
Google's own runs (PageSpeed Insights)
| Run | Score | First frame | Start | First content* | Main content* | Speed Index* | Done before 1st frame |
|---|---|---|---|---|---|---|---|
| 1 | 98 | 0.24 s | on time | 1.1 s | 2.4 s | 2.0 s | 134 KB |
| 2 | 97 | 0.25 s | on time | 1.1 s | 2.6 s | 2.0 s | 137 KB |
Our lab runs (Lighthouse 13.6.0, simulated slow phone)
| Run | Score | First frame | Start | First content* | Main content* | Speed Index* | Done before 1st frame |
|---|---|---|---|---|---|---|---|
| 1 | 99 | 0.16 s | on time | 1.1 s | 2.2 s | 2.1 s | 95 KB |
| 2 | 98 | 0.15 s | on time | 1.1 s | 2.3 s | 2.1 s | 81 KB |
| 3 | 98 | 0.22 s | on time | 1.1 s | 2.4 s | 2.2 s | 80 KB |
What the first frame waits for
| File | Whose | Size | Done at |
|---|---|---|---|
…demo.myshopify.com/cdn/shop/t/53/assets/component-slideshow.css | Your theme | 2 KB | 202 ms |
…wn-demo.myshopify.com/cdn/shop/t/53/assets/component-slider.css | Your theme | 3 KB | 195 ms |
…mo.myshopify.com/cdn/shop/t/53/assets/component-list-social.css | Your theme | 1 KB | 193 ms |
…hopify.com/cdn/shop/t/53/assets/component-localization-form.css | Your theme | 3 KB | 190 ms |
theme-dawn-demo.myshopify.com/cdn/shop/t/53/assets/base.css | Your theme | 12 KB | 189 ms |
3. Third-party code (apps, pixels, chat)
| Service | Download | Phone CPU | Can it wait for the first touch? |
|---|---|---|---|
| Shopify platform platform | 66 KB | 28 ms | leave |
"Your call": holding it is possible but affects ad tracking, sign-up pop-ups or when review stars appear, so we only change it with your OK.
4. Redirects
| Address | Hops | Ends at | Time |
|---|---|---|---|
theme-dawn-demo.myshopify.com/ | 0 | theme-dawn-demo.myshopify.com/ | 147 ms |
theme-dawn-demo.myshopify.com/ | 1 | theme-dawn-demo.myshopify.com/ | 122 ms |
www.theme-dawn-demo.myshopify.com/ | – | - | 16 ms |
www.theme-dawn-demo.myshopify.com/ | – | - | 25 ms |
One hop from an alternate address is normal. Test, link and advertise the final address: each hop costs about 1 s in Google's simulation.
5. Fixes, most valuable first
1 Load the styles of hidden pop-ups in the background Medium impact
- Where
- Home
- Why
- 1 theme file (component-modal-video.css) styles things nobody sees until they tap (pop-ups, search), yet the first frame waits for them.
- The fix
- Load them in the background, with one tiny inline rule that keeps the hidden parts hidden until they arrive, so nothing flashes or moves.
- Evidence
- Part of the Inlinex home-page fix (87 to 99-100 on Google's machine).
- Risk
- Low. Checked by opening the cart on a phone before and after.
- Effort
- Small (1 hour)
Checked and fine
- The address tested answers directly, with no redirect.
- Phone processor load (Total Blocking Time) is low on every page tested.
- Nothing jumps around while the pages load (layout shift under 0.1).
- No video players load up front.
- The server builds the pages quickly.
6. What we will not charge you for
Tested on a real store's live pages, on Google's own machine, and did not work:
- Marking the page 'render-blocking until the headline' with <link rel="expect" blocking="render"> - Worked in local tests, but made Google's own test start late 4 times out of 4.
- Loading Google Fonts only after the page has loaded - The late first frame (~2.3 s) still came after the page's load event, so nothing changed.
- Adding another 'preconnect' to Shopify's file server - 1 on-time run of 2, no better than without it.
- A tiny always-running animation to 'keep frames coming' - Looked good in one batch of runs, then 0 of 2 and 1 of 2 in fair same-batch comparisons.
- Hiding product and collection pages until the main photo appears - Works for a text headline, not for a photo: Lighthouse still counts every request finished before the photo (score stayed 86 / 81).
- Judging any change on ONE PageSpeed run - The same unchanged page scores ~65 or ~85 depending on whether Google's test starts late. Compare 4+ runs per version, in the same batch.
7. How this was measured
- Real-visitor data: Chrome UX Report (last 28 days), read through Google's PageSpeed Insights.
- Lab: 9 page loads with Lighthouse 13.6.0 (the engine behind pagespeed.web.dev), phone, simulated slow 4G, from Singapore on 2 Nov 2026, 08:45 SGT; plus 10 runs on Google's own machine. These loads may show up as visits in your analytics around that time.
- Plain HTTP checks of each page's HTML and of the redirect hops (no browser, not page views).
- Honest limit: Google's test sometimes starts late whatever the store does, so nobody can promise 90+ on every run. What fixes can promise: real visitors passing Core Web Vitals, and on-time runs in the 90s on a typical Shopify theme.