Varnish bij Byte

Gastblog van Erik van Rijn, SupportDesk

Varnish is helemaal hip and happening. Voor ons als SupportDesk is het dus belangrijk om uit te pluizen hoe het precies zit met Varnish en Magento: hoeveel snelheidswinst levert het op, en tegen welke problemen kun je aanlopen? Nadat we in deel één van deze serie verschillende Magento versies hebben onderzocht, is het nu de beurt aan veelgebruikte Magento templates.

Welke Magento templates hebben we getest?

We hebben de volgende 3 templates geselecteerd:

De bovengenoemde templates hebben we getest op Magento 1.7.0.2 en op de Magento 1.8.0 omgeving. Bij de installatie op de 1.8.0 omgeving hebben we weer gebruik gemaakt van de quickfix die we in ons vorige blog beschreven hebben. Meer informatie daarover.

In dit blog wil ik voornamelijk de mogelijkheden en opties laten zien van Turpentine en verschillende templates binnen Magento. Je kunt er vanuit gaan dat de templates minimale verschillen hebben in snelheid. Daarom heb ik me niet gefocussed op de snelheden per template.

Ultimo theme op Magento 1.7.0.2 / 1.8.0.0

Het bestellen van producten binnen het Ultimo theme gaat zonder problemen, de checkout werkt goed en ook de header met de shopping cart wordt keurig geupdate.

Het valt echter op dat geen van de dynamische blokken werkt. Alle dynamische blokken die in de linkerkant worden geladen, worden niet dynamisch aangepast.

Waar gaat het mis?

Waarom gaat het nu mis terwijl wel de standaardblokken van Magento worden gebruikt? Dat komt door het volgende:

Turpentine heeft een layout file genaamd turpentine_esi.xml. In deze file staat de configuratie voor de blokken die dynamisch ingevuld moeten worden en wanneer de blokken opnieuw geladen moeten worden. Tegelijkertijd wijzigen de meeste templates de layout van Magento om deze zelf opnieuw in te vullen. Dit doen ze door de volgende code in de layout files van het template te plaatsen: unsetChild. Deze code zorgt ervoor dat alle waarden van het blok gereset worden. Dit resetten gebeurt dus ook als er door de Turpentine module waarden zijn toegekend aan dit blok om ‘m dynamisch te maken. Resultaat: de dynamische blokken worden statisch geladen in plaats van dynamisch.

Hoe kun je het oplossen?

Het bovenstaande probleem is vervelend, maar gelukkig vrij gemakkelijk op te lossen.

  • Open de eigen local.xml van het template. Is deze file er niet, maak deze dan aan.
  • Bekijk in alle layout files van het template of en zo ja welke unsetChild er gebruikt wordt.
  • Zoek hetzelfde blok op binnen de turpetine_esi.xml file (<reference>  </reference>) en kopieer deze naar de local.xml van het template (onderaan).
  • Leeg de cache.

Vind je dit te lastig? Dan kun je er ook voor kiezen om de hele inhoud van de turpentine_byte.xml in je local.xml te zetten. Download hier de code van byte_turpentine.xml.

Conclusie: met bovengenoemde aanpassing werkt het Ultimo theme goed in combinatie met Varnish – Turpentine.

Hello flip op Magento 1.7.0.2 / 1.8.0.0

Bij dit template merken we dat het bestellen van producten en het updaten van de winkelwagen geen problemen oplevert. Het bestellen van de producten gaat dus zoals het hoort.

Wanneer we naar de blokken kijken, merken we direct dat hetzelfde gebeurt als bij bij Ultimo theme: geen van de dynamische blokken werkt. Alle dynamische blokken die in de linkerkant worden geladen, worden wederom niet dynamisch aangepast.

Als we de oplossing die we hierboven beschrijven inzetten, gebeurt echter niet waar we op rekenden. De dynamische blokken verdwijnen namelijk zelfs volledig. Binnen dit template zijn de blokken dus helaas niet te gebruiken door Varnish.

Conclusie: het template Hello flip is niet geschikt voor de combinatie met Varnish – Turpentine.

Natuurlijk dagen we iedereen uit om hier een oplossing voor te vinden. Heb je er één gevonden? Deel het met ons en de rest van de community!

Het custom template op Magento 1.7.0.2 / 1.8.0.0

Het laatste template dat we testen is een custom template gebruikt door een van onze klanten. Omdat dit template qua opbouw weer totaal anders is dan de hierboven geteste templates, hebben we deze ook goed bekeken. En het leverde interessante informatie op. Dit template gebruikt namelijk geen ‘unsetChild’ in de layout file. Alle blokken blijven op de plek waar ze standaard bij Magento ook zitten en hierdoor werken de blokken dus ook gewoon zoals gewenst.

Ook het bestellen van producten en het updaten van de winkelwagen ging zonder problemen.

Conclusie: het custom template zonder ‘unsetChild’ is geschikt voor de combinatie met Varnish – Turpentine.

Algemene conclusie

We hebben 3 verschillende templates getest met allemaal een andere uitkomst. Het is dus zaak om altijd goed te testen of het template goed werkt voordat je Varnish daadwerkelijk activeert!

Handige debug tips

Twijfel je of de blokken dynamisch (dus als ESI) geladen worden? Zet dan onder Varnish options in het configuratiemenu van je Magento backend de volgende settings aan: Debug Info en Block Logging. Nu hoor je namelijk in de broncode van de pagina de ESI blokken terug te vinden (ctrl F op ESI). Vind je ze daar niet terug, dan worden de blokken niet als ESI ingeladen.

Ook kun je in /var/log/system.log kijken of de blokken dynamisch (als ESI) worden geladen. Dit is bijvoorbeeld ook handig wanneer je een custom blok toegevoegd hebt dat je ook dynamisch wilt hebben en je de naam niet weet. Je kunt dan deze naam achterhalen via deze /var/log/system.log.

 

Lees ook de andere blogposts over Magento en Varnish:

 

Scan je eigen Magento shop op veiligheidslekken