Personalisation at Scale: A “Cookie Cutter” Approach Jim O’Halloran
- Impact on site performance on conversion is huge
- Magento
- LAMP stack + Redis or memcached
- Generally App is CPI bound
- Routing / Rendering still time consuming
- Varnish full page caching (FPC)
- But what about personalised content?
- Edge Side Includes (ESIs)
- But ESIs run in series, is slllow when you have many
- Content is nont cacheable, expensive to calculate, significant render time
- ESI therefore undermines much advantage of FPC
- Ajax
- Make ajax request and fetch personalised content
- Still load on backend
- ESI limitations plus added network latency
- Cookie Cutter
- When an event occurs that modifies personalisation state, send a cookies containing the required data with the response.
- In the browser, use the content of that cookie to update the page
Example
- Goto www.example.com
- Probably cached in varnish
- I don’t have a cookie
- If I login, uncachable request, I am changing login state
- Response includes Set-Cookie header creating a personalised cookie
- Advantages
- No backend requests
- Page data served is cached always
- How big can cookies be?
- RFC 6265 has limits but in reality
- Actual limit ~4096 bytes per cookie
- Some older browsers also limit to ~4096 bytes total per domain
Potential issues
- Request Size
- Keep cookies small
- Store small values only, No pre-rendered markup, No larger data structures
- Serve static assets via CDN
- Lot of stuff in cart can get huge
- Keep cookies small
- Information leakage
- Final URLs leaked to unlogged in users
- Large Scale changes
- Page needs to look completely different to different users
- Vary headers might be an option
- Formkeys
- XSRF protection workarounds
- What about cache misses
- Megento assembles all it’s pages from a series of blocks
- Most parts of page are relatively static (block cache)
- Aligent_CacheObserver – Megento extension that adds cache tags to blocks that should be cached but were not picked up as cachable by default
- Aoe_TemplateHints – Visibility into Block cache
- Cacheing != Performance Optimisation – Aoe_Profiler
Availability
- Plugin availbale for Megento 1
- Varnish CookieCutter
- For Magento 2 has native varnish
- But has limitations
- Maybe some off CookieCutter stuff could improve
Future
- localStorage instead of cookies