Who this is for. Theme and JavaScript developers who own a site's build. Afterwards you can set a weight budget per page type, see which page types break it, and split the build so each page carries only its own code.
Every byte of JavaScript is downloaded, parsed and run before the page can respond, and on a mid-range phone the running costs more than the downloading. Bundle size is therefore a per-page question: what does this type of page need? A build that ships the checkout's code to the home page makes every visitor pay for a feature few of them use. How a theme build is set up is in Builds, bundles and script tags and JavaScript; this page is about the weight.
What a production store ships
A production store on Core dna, measured from its committed build in October 2026, minified and then gzipped as it travels (1 KB = 1,000 bytes):
| Loaded on | File | Minified | Gzipped |
|---|---|---|---|
| Every page | jQuery | 90 KB | 31 KB |
| components bundle | 74 KB | 25 KB | |
| integrations bundle | 10 KB | 3 KB | |
| ui bundle | 6 KB | 2 KB | |
| layout bundle | 6 KB | 2 KB | |
| styles.css | 159 KB | 27 KB | |
| fonts.css | 6 KB | 1 KB | |
| Checkout only | checkout bundle | 402 KB | 94 KB |
| checkout.css | 36 KB | 7 KB | |
| vendor.css | 24 KB | 5 KB | |
| Form pages only | forms bundle | 340 KB | 79 KB |
| Member area | my-account bundle | 449 KB | 181 KB |
| courses bundle | 454 KB | 183 KB | |
| On demand | two dynamic chunks | 9 KB and 1 KB | 2 KB and 1 KB |
So a landing page carries about 63 KB of JavaScript and 28 KB of CSS, and the checkout about 157 KB and 41 KB. The checkout's code is larger than everything every page loads, and because it is a separate entry loaded only by the checkout template, no other page pays for it. That one decision is worth more than any amount of minification. The member area is the counter-example: two large bundles on every member page, about 428 KB of JavaScript in all.
A budget per page type
Set the budget before the build grows, per type of page, gzipped:
| Page type | JavaScript | CSS | The store above |
|---|---|---|---|
| Landing and content pages | under 100 KB | under 50 KB | 63 KB and 28 KB |
| Checkout | under 200 KB | under 50 KB | 157 KB and 41 KB |
| Member pages | under 200 KB | under 50 KB | 428 KB and 28 KB: over |
The first two rows are the targets the JavaScript page of the theme guide sets in its section on bundle budgets, which also shows how to make the build fail when an entry exceeds them; a member area is an application and gets the checkout's allowance, no more. A budget the build enforces would have stopped the member area's bundles growing unnoticed. Count third-party scripts separately (Fonts and third-party scripts): they are not in your build, and they are often heavier than it.
Entry splitting: one bundle per page type
Give each page type whose code is large and its own an entry of its own, and have only that type's template load it. The base template loads what every page needs; the checkout template adds the checkout's bundle to the base template's scripts block: