Frankly I think serving dynamic HTML at all is a problem in an SPA. Use a service worker to cache structure, control, and styling, then use an API to fetch dynamic data in a more efficient manner.