There's another approach which works surprisingly well: If you use Nginx and PHP FPM you can utilize Nginx FastCGI cache [1] to cache dynamic contents. That even allows serving a stale version of an asset while fetching an up-to-date version in the background, avoiding the occasional slow requests for expired items.
With such a cache enabled Wordpress sites feel like they're static pages, while they still offer all features Wordpress offers.
Here is an example for a tutorial on how to configure that for Wordpress: https://easyengine.io/wordpress-nginx/tutorials/single-site/...
[1]: https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#...