Caching is an important aspect when it comes to improving site load times and capturing data on user behaviour. It also becomes a big technical roadblock if you’re not rendering dynamic content with a JS framework. This is usually not a part of the technical stack unless specifically architected at the start. Most of the web applications rely on server side frameworks/languages to render the page and serve HTML page on the frontend with basic JS interactions.
If you’ve been working on a building personalization engine and have a site with huge traffic which needs Akamai or similar service to serve content, you’d understand the limitations imposed by these systems.
When you set the context of the content to be personalized via taxonomy, the application needs to send back the information to a personalization engine in terms of the browsing behaviour, or purchasing behaviour. If you’re looking for personalization in real-time, such scenarios become more pertinent to your situation. Additionally, if you have caching like Varnish or reverse proxies like Cloudflare or Akamai implemented on your site, purging data and rendering the content becomes very expensive for the application.
Unfortunately, the only way to tackle this is to make some major architectural changes in your application. If you’re using Drupal, upgrading the application to Drupal 8.1, which has a built-in Facebook Bigpipe feature, can be a major boost to the application. With Bigpipe caching, major components of your web page are rendered 8 times faster than normal. That’s a huge improvement! There’s a reason people call it Facebook’s secret weapon.
Bigpipe integration with Drupal is relatively new and I am still to see some implementations to confidently say it can work out of box. You might want to look at more custom implementations with JS libraries. Hypernova is one such example, which is developed by AirBNB. Check out Hypernova on github and I am sure you can find tons of them which will fit with your tech stack or your choice of technology framework.
And don’t assume that your developers (or agencies) would’ve taken this into account. To be able to use the Bigpipe advantage, each entity needs to be defined with cache tags, cache contexts and cache max-age, to define in what scenarios you’d want the personalization to kick in. Wim Leers from Acquia gives a pretty detailed webinar on how you can achieve this with Drupal.
Here at Srijan, we are in the midst of implementing one such personalization project. Stay tuned as I’ll soon update this post with our learnings from this project.
Till then, you can check out our introductory blog on Bigpipe caching in Drupal. You can also check out another helpful blog by our friends at Acro Media, which gives a pretty easy to understand explanation on what Big pipe is.