Mageboost Premium is een product dat voor een gigantische versnelling voor je Magento webwinkel zorgt. De kern van Mageboost Premium is een Full Page Cache waarin bijna alle pagina’s van je webwinkel klaargezet worden voor je bezoeker. Door deze techniek zijn er wel wat richtlijnen waar je winkel aan moet voldoen voordat het inbouwen van Mageboost Premium mogelijk is.

In deze pagina proberen we wat algemene richtlijnen en tips te geven die het succesvol activeren van onze Mageboost Premium Plugin zullen vergemakkelijken.

Belangrijk om te weten is dat door de Full Page Cache elke bezoeker dezelfde pagina krijgt van de server. Holepunching zorgt voor invulling van dynamische elementen. Dit werkt door middel van AJAX. Daardoor moeten alle dynamische controllers in AJAX-context aangeroepen kunnen worden.

Webshops waar je op in moet loggen, zoals business to business shops, zullen problematisch zijn. Elke pagina van de shop zal in de cache worden gezet in de vorm waarin niet ingelogde gebruikers en zoekmachines ze zien.

Magento extensies

Niet alle extensies voor Magento werken goed. Over het algemeen kun je zeggen dat plugins die het assortiment personaliseren of mutaties doen op het assortiment buiten de Magento API om, niet goed gaan werken.

Wat werkt wel?

  • Extensies die ingrijpen in het afrekenproces, zoals: One Step Checkout, extensies van betaalprovides en extensies van vrachtvervoerders.
  • Extensies die je producten verrijken met meer eigenschappen dan standaard.
  • Feeds voor social media zoals Twitter en Facebook.
  • ERP-koppelingen die gebruik maken van de Magento API.
  • Het bijhouden van voorraadstatus van producten.

Wat werkt niet?

  • GeoIP-achtige zaken die assortiment of taal veranderen per bezoeker, zonder ze naar een andere URL te sturen
  • Extensies zoals Catalog Permissions, die het assortiment aanpassen aan de hand van rechten van ingelogde gebruikers.

Purges

Mageboost Premium bestaat uit een aantal componenten. De belangrijkste zijn een extensie voor Magento en een Full Page Cache (FPC).
Onze extensie zal automatisch zorgen dat verouderde pagina’s uit de FPC verwijderd worden. Om dat voor elkaar te krijgen, luistert hij me op diverse events die door Magento gegenereerd worden. Bijvoorbeeld bij het muteren van een product, zal Magento een event genereren die opgevangen wordt door onze extensie. Die bepaalt op welke pagina’s het product getoond wordt. Dat is uiteraard op een product detailpagina, maar ook categoriepagina’s en misschien wel de indexpagina van de site. En uiteraard kan een product in meerdere storeviews aanwezig zijn. Alle urls worden verzameld en door de extensie uit de FPC gepurged.

Dit werkt uiteraard alleen als er netjes via de door Magento beschikbaar gestelde API’s gewerkt wordt. Ga je rechtstreeks op de database werken, dan worden er geen events verzonden en zullen purges niet uitgevoerd worden. Gevolg is dat de bezoeker verouderde content geserveerd krijgt.

Soms is het echter gewoon nodig om buiten Magento om het assortiment te muteren. In dat geval biedt onze extensie een API voor het uitvoeren van purges die je zelf vanuit je code kunt aanroepen. Je kunt losse producten en categorieën laten prugen, of zelfs de volledige FPC.

Over hole punching

Als je een willekeurige pagina van een webshop neemt, dan zal een heel groot deel van die pagina voor elke bezoeker exact hetzelfde zijn. Mocht dat bij jouw shop niet het geval zijn, dan is Mageboost Premium niet geschikt. Dat is echter een uitzondering. Vrijwel altijd zal slechts een klein deel van een pagina gepersonaliseerd worden voor de bezoeker.

Voor die personalisatie kun je denken aan het bekende blokje waarin staat “U heeft X producten in uw winkelmandje” of een “Laatst bekeken producten”. Ook feeds van social media vallen hier onder. Wat we ook soms zien zijn meldingen als “Bestel binnen X tijd en uw order wordt vandaag nog verzonden”.

Voor al dit soort gepersonaliseerde (dynamische) content maken we zogenaamde hole punches. Dit zijn “gaten” in de statische content. Door die gaten “kijk” je naar Magento. We implementeren het door voor elke pagina een AJAX call te doen die de dynamische blokken van een pagina op zal halen. Het resultaat van de AJAX call wordt geïntegreerd met de uit de FPC geladen pagina. Dit zul je ook zien als een verandering van de pagina, snel nadat hij getoond wordt in de browser. Het resultaat van de AJAX call wordt in de browser local storage opgeslagen zodat het direct beschikbaar is bij volgende pageloads door de bezoeker.

Dit mechanisme kan alleen goed werken als de templates netjes opgebouwd zijn en er een goede toepassing is van het Model/View/Controller principe.

Veelgemaakte fouten zijn:

  • Code in de view die eigenlijk in de controller had moeten zitten. Denk aan extra filtering van lijsten direct in een HTML template.
  • Controllers die niet goed werken in AJAX context.
  • Slechte scheiding van blokken in je layout.xml bestanden. We zien heel vaak dat een winkelmandje onderdeel is van de (statische) header. Dit moet netjes gescheiden zijn.

layout.xml

Bij het maken van hole punches worden dynamische blokken in de layout.xml bestanden vervangen door zogenaamde placeholders. Dat is ook waarom het zo belangrijk dat blokken in de layout.xml bestanden ook écht statisch of écht dynamisch zijn.
De placeholders worden door de AJAX call vervangen door bezoeker-specifieke content. Deze content kan afhangen van de sessie of van de sessie én product/categorie. Dat laatste komt niet zo vaak voor. Dit zijn blokken die niet alleen per bezoeker, maar ook per bekeken product of categorie variëren.

De crawler

We starten altijd met een volledig lege Full Page Cache. Er zijn twee manieren om die te vullen, die in de praktijk tegelijkertijd gebeuren. De eerste manier is door bezoekers. Deze zullen merken dat de eerste keer dat ze een pagina opvragen, er een langere laadtijd is. Deze laadtijd is de normale laadtijd van Magento. De andere manier is via robots, zoals indexers van zoekmachines. Onze eigen crawler valt hier ook onder. Elke twee uur zal deze starten en elke url van de shop opvragen. Op deze manier zal uiteindelijk de volledige shop in de FPC opgenomen zijn.

Echter, een shop is niet een statisch iets. Er zijn vaak mutaties op het assortiment. Daardoor worden URLs uit de FPC gepurged. De crawler zal automatisch de pagina’s weer bezoeken om ze weer klaar te zetten in de FPC.

Hou er rekening mee dat een bulk update aan je assortiment zal zorgen voor een bulk purge van de FPC met bijbehorende val in performance van je shop. We zien dat sommige shops altijd hun volledige assortiment synchroniseren met hun ERP-pakket, onafhankelijk of er mutaties zijn geweest of niet. Probeer dat te voorkomen. Probeer altijd een minimale synchronisatie uit te voeren, zodat de FPC zijn effectiviteit behoudt.

Business to Business, GeoIP, Taalselectie

Business to Business sites onderscheiden zich van Business to Consumer sites door het feit dat er ingelogd moet worden voordat het assortiment getoond wordt. Voor Mageboost is dit erg moeilijk. In het traject van bezoeker naar FPC naar Magento wordt alle sessieinformatie (cookies) gestript van het request. De FPC krijgt dus altijd een volkomen generieke pagina van Magento. Deze generieke pagina moet voldoende informatie bevatten die direct relevant is voor de bezoeker. Een kale pagina met “Je moet ingelogd zijn om deze pagina te bekijken” is dus weinig zinvol.

Ook shops die met GeoIP werken kunnen problematisch zijn. Over het algemeen geldt: wanneer je niet aan de url kunt zien welke versie van de site de bezoeker te zien krijgt, dan werkt het niet goed met Mageboost Premium.

Hetzelfde geldt voor taalselectie: aan de url moet je de taal kunnen zien. Meerdere talen op één url werken niet goed met Mageboost.

Problemen met b2b sites — of andere sites die achter een login zitten — lossen we soms wel op door alle pagina’s beschikbaar te maken voor de bezoeker, echter zonder prijsinformatie en bestelmogelijkheid. We voeren dan een holepunch uit op de prijs en de bestelknop.

Eenzelfde oplossing hebben we voor sites die prijsregels hebben voor ingelogde gebruikers, maar niet ingelogde gebruikers wel toegang geven tot het gehele assortiment.