In order of impact-per-effort:
1. Images — this is 80% of most slow sites. Serve WebP/AVIF, size them to their display size, lazy-load below the fold. Next/Image or an image CDN does this for you.
2. Kill unused JavaScript — check your bundle: that 300KB chart library for one graph, the whole of lodash for one function. Code-split routes.
3. Cache static assets — long cache headers on JS/CSS/fonts; a CDN in front of everything.
4. Fonts — max two families, `font-display: swap`, preload the main one.
5. Measure again — fix what the report actually says, not what blog posts guess.
Do step 1 alone and you'll likely jump 25+ points.
Also check your hosting region vs your users. I moved a site from a US server to Mumbai for an Indian audience and TTFB dropped from 800ms to 90ms — no code changes. A CDN with edge locations near your users is the cheapest 'optimization' there is.