A slow page is slow in one of three places: the server before it sends a byte, the network in between, or the browser after it arrives. Each has a different fix and none of them helps the other two. Guessing wrong costs a weekend and changes nothing.
1. How long before the first byte
curl -sS -o /dev/null -w 'dns %{time_namelookup} connect %{time_connect} tls %{time_appconnect} ttfb %{time_starttransfer} total %{time_total}\
' https://yourdomain.com/
A TTFB over about 600ms with a small connect time is the server thinking. Under 200ms and the server is not your problem, whatever the page feels like.
2. Is it the application or the database
# is anything slow enough to be logged
sudo tail -f /var/log/mysql/mysql-slow.log
See the slow query log. One query taking 900ms explains far more sites than any amount of caching would have.
3. What the page actually weighs
Open the network panel, sort by size, and read the top five rows. On most sites they are all images - see images that are too heavy. Reading a waterfall properly is covered in its own article.
4. What a real visitor gets
Your office connection is not the measurement. Test from where your customers are, on a throttled connection, on a mid-range phone.