HGVision
GAMES DESIGN DEVELOPMENT

Magento 1.9.1.1 mit PHP7 - Perfomance geht deutlich nach oben

Blogbild

Die Versprechungen seitens PHP zur neuen Version PHP7 waren groß. Allein der Umstieg auf PHP7 sollte jede Software die kompatibel ist um das doppelte schneller machen. Mein aktuelles Steckenpferd was so etwas angeht ist und bleibt Magento. Wie profitiert also Magento 1.9.1.1 von der neuen PHP7 Version.

IST-Zustand

Für einen unserer Shops welchen wir hier auf der Arbeit betreuen haben wir einen Testserver laufen in einer etwas kleineren Variante als den Live Server. 2,66 GHz CPU mit 2 GB RAM. Aber ist ja auch nur zum Testen. Der Shop selber läuft mit Version 1.9.1.1 von Magento und einem Custom Theme. Seite einiger Zeit drehen wir schon an diversen schrauben um die Performance des Shops weiter nach oben zu bekommen.

PHP5.6 ist drauf, dazu kommen diverse Optimierungen an den Datenbank Settings, Redis und seit neustem noch Varnish. Da der Varnish ja erst beim zweiten Aufruf greift ist der erste Aufruf jeder Seite auch weiterhin relativ langsam doch durch Varnish kann die Last vom Server genommen werden was zu einer generellen Beschleunigung des Shops führt.

SOLL-Zustand

Auf dem Testserver mit CentOS 7 soll PHP7 installiert werden und der Magento Shop soll unter PHP7 soweit laufen das die Seiten angezeigt werden. Es geht erstmal nur um einen Perfomance Test nicht um einen Funktionstest, der kommt in nächster Zukunft.

Vorgehensweise

Zuerst wurde vom Server das alte PHP5.6 komplett entfernt und nach dieser Anleitung von Webtatic.com (PHP 7 on CentOS/RHEL 6.7 and 7.1 via Yum) PHP7 installiert.

Wer Redis einsetzt und das PHP7 Paket verwendet könnte mit lzf etwas Probleme bekommen da diese PECL Extension nicht dabei ist. Man muss seine local.xml dann so anpassen das Redis gzip verwendet.

Folgende Anpassung am Core Quelltext muss zwingend gemacht werden oder per Extension überschrieben werden:

Datei: app/code/core/Mage/Core/Model/Layout.php
Zeile: 555

Aus

$out .= $this->getBlock($callback[0])->$callback[1]();

wird

$out .= $this->getBlock($callback[0])->{$callback[1]}();

Dazu gibt es aber auch schon einen Blog Eintrag von Anna Filina (Magento 1.9 on PHP7) vom 30. Mai 2015, da wurde aber noch mit einer Beta von PHP7 gearbeitet.

Der Test

Unter PHP5.6 und PHP7 wurden die gleichen Schritte durchgeführt und zwar:

  • Aufruf Startseite
  • Aufruf Kategorie
  • Aufruf Produkt
  • Hinzufügen zum Warenkorb
  • Aufruf Warenkorb
  • Zur Kasse

Es wurde dabei die gleiche Kategorie und das gleiche Produkt aufgerufen. Varnish wurde vor dem Aufruf natürlich geleert also wurden die Seiten nicht vom Varnish ausgeliefert.

 

PHP5.6 (Zeit in Sekunden)

PHP7 (Zeit in Sekunden)

Startseite

7,8

3,97

Kategorieseite

6,74

3,4

Produktseite

3,53

2,08

Hinzufügen zum Warenkorb

(AJAX)

10,19

1,05

Warenkorb

4,26

2,11

Kasse

3,86

2,00

Im Durchschnitt haben sich die Zeiten als halbiert. Die Produktseite und das Hinzufügen zum Warenkorb fällt etwas raus aber im Grunde profitiert Magento durch PHP7 genau so wie es vorhergesagt wurde. Die Zeiten halbieren sich.

Ladezeiten unter PHP5.6 und PHP7

Man kann also sagen, auch wenn Magento 1.9 offiziell PHP7 nicht unterstützt, bis jetzt, PHP7 steigert die Leistung von Magento 1.9 und das ohne viele Anpassungen am eigentlichen Core Code von Magento.

Nächster Step wird es sein zu testen ob alles am Shop noch funktioniert wie es soll.