Performance is a feature — and in e-commerce, it's revenue. A surprisingly small set of issues is responsible for most slow experiences, so here's the short list worth checking first.
LCP: it's almost always the image
Nine times out of ten, a slow Largest Contentful Paint is a hero image that's too large, not preloaded, or served from a slow origin. Serve modern formats (AVIF/WebP), size images to their container, preload the hero, and put assets on a CDN. That alone can move LCP from several seconds to well under two.
INP: death by a thousand handlers
Interaction to Next Paint punishes heavy JavaScript on the main thread. The fixes are unglamorous: less JS shipped, fewer third-party scripts, debounced handlers, and moving work off the interaction path. Framework-level wins like server components help enormously.
CLS: reserve the space
Layout shift is a discipline problem: every image needs dimensions, every ad slot and embed needs a reserved box, and fonts need a matched fallback so text doesn't jump when the webfont loads.
We build these defaults into our project setup so a site starts green rather than being optimised back to green later. If your scores are stuck orange, an afternoon of profiling usually pays for itself many times over.