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}\n' 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\nsudo 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.

Change one thing, then measure again. Three changes at once and you will never know which one helped - or which one of them made it worse while another hid it.
Write the numbers down before you start. Feeling faster is not evidence, and after an afternoon of work everybody feels the site is faster.