Most Shopify speed advice is either too generic ("optimize your images") or too aggressive ("rip out your theme"). The truth sits in the middle, and it's boring: audit, measure, remove, then optimize — in that order.
Start with the apps. Every Shopify app that injects a script is a tax on every page load. Open your theme's rendered source and count the third-party domains. In most slow stores we audit, two or three apps account for the majority of the blocking JavaScript. Removing or replacing them is usually the single biggest win.
Next, images. Shopify serves responsive images if you let it — use the theme's image_url filters with width parameters and loading="lazy" below the fold. The hero image is the exception: it's almost always your LCP element, so preload it and never lazy-load it.
Then fonts. Self-host or preconnect, subset to the weights you actually use, and set font-display: swap. A single unused font weight can delay your first render on mobile.
Only after all that do we touch Liquid and theme JavaScript. Optimizing code you could have deleted is wasted effort. The checklist works because it forces you to remove before you refine.