"My store is slow" almost never has a single cause. It is usually eight things, each individually small, stacking up until the mobile experience is gone — and with it a share of the traffic you paid for.
Worth stating first: Shopify's own infrastructure is fast. Hosting, CDN and caching are the platform's responsibility. Slowness nearly always comes from what has been added to the store afterwards.
1. App scripts
The largest single item. Every app injects its own JavaScript, and that code usually loads on pages where the app does nothing. In a store with ten apps, the code the browser downloads can be several times the size of the theme itself.
2. Leftover code from removed apps
Uninstalling an app does not always remove the code it added to the theme. Remnants from apps trialled months ago are frequently still executing — pure weight, zero function.
3. Unoptimised images
A 4000px product photo rendered into a 600px slot is common. The browser downloads all of it and then shrinks it. Serving images at the size they are displayed is one of the fastest wins available.
4. Everything loading at once
Images, videos and widgets below the fold should not load on first paint. Most themes support lazy loading, but sliders and custom sections routinely miss it.
5. Font loading
With custom fonts, text can stay invisible until the font arrives — the visitor stares at empty space. Limiting the number of faces and setting the display behaviour correctly changes perceived speed noticeably.
6. Tracking and advertising tags
Analytics, ad pixels and a tag manager each add requests. These may be necessary, but the same measurement configured twice — once directly and once through the tag manager — produces both double counting and wasted load.
7. Heavy homepage sections
Autoplaying video, large sliders and stacked animations weigh the homepage down. Their contribution to conversion is usually unmeasured; their cost is measurable.
8. The theme code itself
Last on the list because it is the least common cause. That said, years of hand-edited snippets or a long-unmaintained theme can carry a genuine cost.
Where to start
In order: list the installed apps and separate the ones actually in use, clear the remnants of the removed ones, then fix images and lazy loading. Those three steps usually close most of the gap.
When measuring, keep lab data and field data apart. A single test load tells you what to fix; real-user data tells you whether the fix worked.