Context
Context. The site renders every public page for every visitor, because the header greets members by name, shows a cart count, or reads a cookie, and someone added preventCaching() to make it correct. It works, it is slow under load, and it gets slower as traffic grows. Moving to the hybrid pattern solves it without a rewrite into a JavaScript application: cache the page, and fetch the few personal parts after it has loaded (Hybrid: cached pages with dynamic parts). It can be done one element at a time, with the site working after every step.