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