Hoe werkt Varnish met Magento versies?

Gastblog van Erik van Rijn, SupportDesk

Varnish, het wordt als een wondermiddel gezien als het gaat om snelheid van Magento shops. Ze gaan er van vliegen, zegt men (en het Varnish-team zelf ;-)). Maar tegelijkertijd is ook bekend dat Varnish geen kant-en-klare oplossing is als je geen kant-en-klare webshop hebt. Het kan heel wat developmenturen kosten om het gewenste resultaat te behalen.

Byte Varnish aan voor haar Magento Go Big pakketten. 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? Onze bevindingen delen we graag met jullie. 

Hoe werkt Magento met Varnish?

Ik ga in 3 blogposts uitzoeken hoe de combinatie Magento – Varnish in de praktijk werkt, hoeveel snelheidswinst het oplevert en tegen welke problemen je aan kunt lopen. Dat doe ik door het op te delen in 3 onderwerpen:

  1. Magento versies
  2. Magento templates
  3. Magento plugins

In deze blogpost deel ik jullie in de resultaten van het eerste onderzoek: Varnish en verschillende Magento versies.

Beheermodule

De eerste stap die genomen moet worden om te werken met Varnish is het selecteren van een module die ervoor zorgt dat er dynamische blokken (ESI blocks) binnen Magento komen en dat de VCL (configuratiefile van Varnish) gemaakt wordt. Gezien de handige integratie van Byte binnen het Service Panel hebben we er voor gekozen om de opensource module Nexcess/Turpentine te gebruiken. We kijken welke Magento versies out of the box (dus zonder custom aanpassingen) goed werken met Turpentine en Varnish. Hierbij hanteren we de standaardconfiguratie van Turpentine zoals Byte beschreven heeft in het artikel Varnish configureren voor Magento.

Magento versies

De volgende versies hebben we getest:

  • Magento 1.7.0.0
  • Magento 1.7.0.2
  • Magento 1.8.0.0
  • Magento 1.8.1.0

Werking Magento < 1.7

Turpentine geeft zelf aan dat het zou moeten werken bij versies hoger dan 1.5. Wij hebben dit echter niet getest, dus over gebruik hiervan kunnen we niets zeggen.

Magento 1.7.* met Varnish

We hebben de standaard 1.7.* versie van Magento getest, gevuld met sample data, met Turpetine en Varnish out of the box. Hieruit bleek dat Turpetine alle dynamische blokken keurig regelt en de shop goed blijft werken zonder dat er extra aanpassingen aan de configuratie gedaan moeten worden.

Wat hebben we getest?

  • toevoegen aan de winkelwagen,
  • toevoegen aan de wishlist,
  • het afrekenen van Simpele- Bundle- en Configurable producten binnen Magento.

Conclusie: de standaardinstallatie van Magento 1.7 met Turpentine blijkt goed te werken met Varnish.

Snelheid Magento 1.7.* met Varnish

We hebben een Magento versie getest (Magento 1.7.0.2.) met en zonder Varnish. Hierbij hebben we Firefox (F) en GTmetrics (G) gebruikt. Hieronder de resultaten:

Versie First time to byte (F) Page load time (G)
1.7.0.2 0.628 1.61
1.7.0.2 met Varnish 0.138 0.79

Voornamelijk op de First time to byte is een grote verbetering zichbaar wanneer Varnish actief is. Ook in de gebruikservaring merk je het: je hebt meteen door dat de pagina snel laadt. En als bezoekers iets graag willen, dan is dat dat de shop lekker snel is.

Magento 1.8.* met Varnish

Voordat we met de test van Magento 1.8 begonnen, waren we al een beetje gewaarschuwd. Toen de 1.8 versie van Magento uitkwam, bleken de meeste Full page cache oplossingen voor Magento niet meer te werken. En sinds de 1.8. release zijn er nog geen updates voor de Varnish modules van Magento uitgebracht.

Bij het testen bleek inderdaad dat de eerste bezoeker van de site een snelle en goed werkende shop kreeg, maar dat het misging bij de bezoekers erna. Deze bezoekers konden geen producten meer in de winkelwagen plaatsen. Dit bleek het geval te zijn bij Magento 1.8.0 en bij Magento 1.8.1.

Voor de techies onder ons:
In de 1.8 Community versie van Magento zijn er form_keys toegevoegd die er voor moeten zorgen dat het niet meer mogelijk is om CSRF toe te passen bij de Magento shops. Deze form_keys zitten op diverse manieren op de Magento pagina’s verwerkt. Denk hierbij aan de productpagina, maar ook op de categorypagina omdat je daar vaak producten al aan je winkelwagen kunt toevoegen. Omdat het veel en vaak voorkomt is het niet mogelijk hier een ESI block van te maken. Dan zou Varnish geen nut meer hebben.

Conclusie: de standaardinstallatie van Magento 1.8 met Turpetine blijkt niet goed te werken met Varnish.  

Maar: we (SupportDesk) hebben een work around gemaakt die het mogelijk maakt om Magento 1.8 te gebruiken met Varnish. Hiervoor dien je een extra plugin te installeren die de beveiliging van Magento omzeilt. Het gebruik is natuurlijk wel op eigen risico!

Snelheid Magento 1.8.* met Varnish

Ook Magento 1.8.* hebben we op snelheid getest met en zonder Varnish. Hierbij was de door ons gemaakte plugin geïnstalleerd. Hieronder de resultaten:

Versie First time to byte (F) Page load time (G)

1.8.1

0.628

1.61

1.8.1 met Varnish

0.160

0.85

De snelheid was net als met Magento 1.7 dik in orde. Je merkt een duidelijk verschil tussen wel en niet Varnish en ook de dynamische blokken worden goed geladen.

Conclusie

Na de bovenstaande tests kunnen we concluderen dat de combinatie Magento en Varnish (met Turpetine) heel goed werkt en inderdaad je Magento shop ‘kan laten vliegen’ als het gaat om snelheid. Maar let wel op: we hebben hier de standaardinstallaties van de Magento versies getest. Heb je veel custom configuratie in je installatie, dan kan het goed zijn dat er een dosis technische kennis nodig is om je Magento shop vlekkeloos te laten draaien op Varnish. In de volgende blogposts bespreken we daarom de resultaten van de tests met de meestgebruikte Magento templates en plugins in combinatie met Varnish.

Lees ook de andere blogposts over Magento en Varnish: