Supersnelle PHP via Facebook’s HHVM

Maak je webite tot wel 3x sneller met de HipHop tegenhanger van PHP.

Wat is HHVM

hhvm-logo

HHVM  — ook wel Hiphop Virtual Machine — is een door Facebook ontwikkelde JIT (just-in-time) compiler voor de programmeertaal Hack en ondersteunt nu ook PHP. Door de compileer-insteek kun je tot wel 300 tot 400% snelheidswinst halen via de PHP interpreter.

Wat is het verschil tussen JIT en de interpreter?

JIT is een virtuele machine die bij het opvragen van je script deze omzet naar machinetaal (bytecode) en deze doorzet naar de processor om uit te voeren. De processor kan deze machinetaal  veel sneller verwerken dan de traditionele PHP interpreter.

Daarnaast wordt de bytecode ook nog bewaard zodat het omzetten niet bij iedere bezoeker opnieuw hoeft te gebeuren. De PHP interpreter daarentegen is een programma dat keer op keer de dat de pagina bezocht wordt de scripts omzet en aan de CPU doorgeeft. Hierdoor is de response bij JIT de eerste keer misschien iets langzamer, maar daarna veel sneller dan bij een interpreter.

Wat maakt HHVM anders dan PHP

PHPPHP-logo HHVMhhvm-logo
Script interpretator
PHP scripts
Veel extensies
JIT compiler
PHP scripts en Hack
in ontwikkeling

Hoeveel sneller is HHVM dan PHP?

We hebben een aantal tests gedaan PHP en HHVM te vergelijken. We hebben hier 3 veel voorkomende CMS systemen voor gebruikt. Gemiddeld  hebben we hier een snelheidswinst uitgehaald van  288%, dus bijna drie keer!

Testsystemen

Voor de test hebben we twee eenvoudige cloudservers opgezet die gebruik maken van de Apache webserver met onderstaand specificaties. We hebben naast de verschillen in HHVM en PHP ook gekeken of er verschil zit in de combinatie tussen HHVM met een Apache 2.2 of Apache 2.4 webserver.

HHVM cloudserver PHP/HHVM cloudserver
1GB Ram
1CPU core
SAS disk met SSD caching
Ubuntu 14.04
Apache 2.4
HHVM 3.0.1
1GB Ram
1CPU core
SAS disk met SSD caching
Ubuntu 12.04
Apache 2.2
HHVM 3.0.1
PHP 5.3.3

Deze servers zijn standaard geïnstalleerd en er zijn geen verdere optimalisaties toegepast op de CMS’en, zoals extra caching lagen en database optimalisaties.   We hebben de volgende 3 CMS systemen gebruikt voor de test.

  • Magento 1.9:de laatste versie van een van de meest gebruikte Webshop platformen
  • WordPress 3.9.1: een CMS systeem, dat door meer dan 20% van alle websites ter wereld wordt gebruikt.
  • Joomla 3.3: het CMS  dat staat op de tweede plaats van de meest gebruikte Open-Source CMS systemen

We hebben tijdens de test gekeken naar de zogenaamde first-time-to-byte. Dit is  het tijdsverschil tussen de aanvraag vanuit de browser van een pagina en het eerste moment waarop de browser gegevens ontvangt van de server. In deze periode wordt de pagina klaar gemaakt door PHP of HHVM. Door hier naar te kijken kun je goed zien wat het verschil is tussen de twee systemen en laten we alle plaatsen en scripts voor de vormgeving buiten de scope.

WordPress

We hebben de laadtijden verschillende keren gemeten om zo een gemiddelde te kunnen bepalen.

Je ziet hier een duidelijk verschil tussen de PHP interpreter en de HHVM. Het verschil tussen de Apache 2.2 en Apache 2.4 is daarentegen weer bijna te verwaarlozen. De gemiddelde laadtijd van PHP is 323ms en voor de HHVM met Apache 2.2 was deze 97ms tegen 95ms op een Apache 2.4 webserver met HHVM. Je ziet dus dat je met een WordPress zonder enige optimalisatie al bijna 3,5 keer zo snel bent met een HHVM server.

Joomla!

Als we deze test doen op een Joomla installatie op de zelfde servers zie je het volgende:

De laadtijden van de

HHVM is — zij wat minder constant — nog altijd vele male sneller dan PHP. Joomla! laadt met PHP in gemiddeld 170ms terwijl de HHVM server met Apache 2.2 dit doet in minder dan 65ms. De Apache 2.4 server met HHVM is dan iets langzamer met nog een indrukwekkende 71ms.

Magento

We hebben wat uitgebreidere tests gedaan op Magento omdat het van Magento bekend is dat het een zwaar en log systeem is. We hebben hier onderscheid gemaakt in de verschillende type pagina’s.

Om te beginnen hebben we de voorpagina getest.

Je ziet hier al duidelijk een verschil tussen de laadtijden van HHVM en PHP.  De gemiddelde laadtijd van de magento voorpagina met PHP was 260ms tegenover een laadtijd van 90ms op de HHVM server. Hier onder de categorie pagina’s en de CMS pagina’s met statische content, ook hier is HHVm weer duidelijk de winnaar.

We hebben gekeken naar de tijd die het duurt om iets in het winkelmandje te stoppen. Dit is vaak een wat zwaardere actie in de meeste webshops.

Je ziet duidelijk dat de PHP versie met zijn 860ms gemiddeld een stuk trager is dan de HHVM versie met 380ms. Tenslotte keken we naar de checkout of afrekenpagina, ook dit een van de zwaardere webpagina’s van een webshop.

Hier is het helemaal duidelijk dat HHVM vele malen sneller is dan PHP, met gemiddeld iets meer als een seconde voor de PHP versie tegen 350ms van de HHVM server.

Is HHVM de oplossing?

Is HHVM nu de oplossing of is het nog niet zo ver? Dit afhankelijk van wat je er van verwacht. We hebben aangetoond dat HHVM 3 keer zo snel is als PHP en al we meer optimalisaties gaan gebruiken misschien wel 4 keer zo snel.

Het probleem is echter dat HHVM nog steeds niet alle functionaliteit heeft die PHP wel al in zich heeft zitten. Niet alle PHP modules die gebruikt worden zijn beschikbaar voor HHVM. Hier wordt hard aan gewerkt door de ontwikkelaars, maar ze zijn er nog niet.

Dit betekent dus ook dat niet alle CMS’en geschikt zijn om op HHVM te installeren. Vaak is het niet helemaal bekent welke PHP extensies een CMS gebruikt en hierdoor dus ook niet vooraf te vertellen of HHVM gaat werken op jouw website. We zullen in de komende tijd meer verschillende CMS’en testen en kijken van welke systemen we kunnen aangeven dat deze als standaard installatie werken met HHVM

Tenslotte is HHVM grotendeels compatible met PHP 5.5. Niet alle CMS’en werken goed op PHP 5.5 en dus ook niet op HHVM.

Ondersteunde extensies

Apache
APC
APD
cUrl
DOM
Hash
Image (gd)
ImageMagick (Imagick)
IMAP
tl (partially — e.g., missing NumberFormatter right now)
IPC
JSON
LDAP
Mailparse
MB
MCrypt
Memcache
Memcached
In
MySQL
PDO
PHAR
POSIX
PReg
SimpleXML
SOAP
SPL
SQLite3
XML
XSL
ZLib

Een groot gemis is nog de IonCube module, hierdoor zijn er onder andere voor Magento verschillende extensies niet te gebruiken.

De toekomst

Op dit moment is HostingXS bezig om ons platform gereed te maken voor HHVM. Begin juli hopen we een server te kunnen presenteren die HHVM kan draaien en netjes te bedienen is vanuit ons control panel.
[gravityform id=”15″ name=”HHVM Updates” title=”true” ajax=”false” /]

2 reacties op “Supersnelle PHP via Facebook’s HHVM

  • Jisse Reitsma

    Heel gaaf om te zien dat jullie bezig zijn met HHVM. Het is de nieuwe cutting edge technologie voor Magento – vooral omdat Magento zelf een draak van een pakket is. Net de response tijden bij jullie zitten bekijken. Gaaf!


  • Gertjan Groen

    Is hhvm nog steeds relevant met de komst van php 7? En hoe zit het met compatibiliteit? Ik kan me indenken met WordPress, Magenta, Joomla e.d. eerder compatibel zullen zijn (of worden gemaakt) met php 7 dan met het minder gangbare hhvm.


Reageren is niet mogelijk.