Plugins solve a lot, but the fastest optimizations are done at the server level. Before installing yet another cache plugin, check if the server is doing its job.
OPcache
PHP is compiled from text to bytecode on every request. OPcache stores the compiled code in memory. Enable in php.ini: opcache.enable=1 and opcache.memory_consumption=128. It affects load time more than most caching plugins, and it costs nothing.
Object Cache with Redis
WordPress makes hundreds of database queries per page load. Object cache stores the results in RAM so the same queries don't hit the database again. Redis is faster and more reliable than Memcached for this purpose.
Install the Redis server, install the WP Redis plugin (the only plugin we recommend in this context), done. The difference is most noticeable on pages with lots of dynamic content: WooCommerce category pages, dashboard, complex queries.
Gzip and Brotli compression
In Nginx: gzip on; in the configuration. It halves the size of HTML, CSS, and JavaScript with no visible impact. Brotli provides another 10 to 20 percent better compression but requires an extra module.
HTTP/2
Multiplexing means multiple files load in parallel over a single connection. Requires HTTPS (which you should already have). Most modern servers support it, but verify it's enabled. curl -I --http2 https://your-site.com shows if it's working.
Database maintenance
Delete old revisions, transients that never get cleaned up, and spam comments. DELETE FROM wp_posts WHERE post_type = 'revision' (back up first). Run OPTIMIZE TABLE on the largest tables afterwards.