RSS-Feed
Beiträge
Kommentare

Performance - Performance - und noch mal: Performance!

Elf Jahre ist es nun her, dass mit PHP 5 etliche gravierende Neuerungen in PHP eingeführt wurden. Seitdem wurde viel diskutiert, war eine Version PHP 6 geplant, wurde verworfen - und nun ist es so weit: Seit Anfang Dezember liegt ein erstes Release PHP 7.0 vor. Das ist vor allem deswegen interessant, weil bei dieser Version performancerelevante Verbesserungen im Zentrum standen. Dafür wurden auf Basis des PHPNG-Branches unter der Haube tiefgreifende Änderungen durchgeführt.

Die ersten Benchmark-Berichte klingen vielversprechend:

  • 80 Prozent mehr Drupal-8-Requests pro Sekunde als PHP 5.6
  • 30 Prozent mehr Requests pro Sekunde als Facebooks HHVM 3.7
  • doppelt so viele Requests pro Sekunde bei WordPress 4.1.1 als PHP 5.6

Für Magento z. B. heißt das:

“With execution time more than twice as fast compared to PHP 5.6 and 30% lower memory consumption - servers running PHP 7 will be able to serve up to 3x as many requests as those running PHP 5.6.”

https___pages_zend_com_rs_zendtechnologies_images_PHP7-Performance_Infographic_pdf

(Quelle: https://pages.zend.com/rs/zendtechnologies/images/PHP7-Performance%20Infographic.pdf)

Weitere Zahlen zu Vorteilen bei der Verwendung von Magento, Drupal, WordPress, Laravel, Zend Framework etc. findet ihr hier: http://www.zend.com/en/resources/php7_infographic.

Bei ScaleCommerce werden wir in Kürze eigene Benchmarks mit echten Shop-Installationen durchführen und hier berichten.

 

Was ist neu an PHP 7?

Neben der umfassenden Performanceoptimierung gibt es auch zahlreiche Neuerungen, von denen hier nur einige exemplarisch genannt seien:

  • Unterstützung für Unicode mit UTF-8
  • Änderungen im Error-Handling (Exceptions statt Errors)
  • Vereinheitlichungen im Variablen-Handling
  • neue Operatoren (z. B. der ‘Drei-Wege-Vergleichsoperator’, ‘Spaceship-Operator’)
  • erweitertes Type-Hinting (z. B. auch für Rückgabewerte)
  • 64bit-Unterstützung für Windows
  • u.v.m.

 

Wer mehr über die neuen Funktionen und Features wissen möchte, kann hier eine entsprechende Auflistung finden: http://php.net/manual/de/migration70.new-features.php.

 

Was ist bei einer Migration zu beachten?

Wie immer bei Major Releases gibt es auch bei PHP 7 einige Punkte zu beachten, falls ihr eure Applikationen auf die neue PHP-Version migrieren möchtet:

  1. Entfernung von deprecated functions
    Eine vollständige Liste der deprecated Functions und Features, die in PHP 7 komplett entfernt wurden, findet ihr hier: https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7.
    Fragt also bei den Herstellern eurer Software nach - oder sucht selbst im Code, ob eure Applikation ggf. irgendwo noch eine dieser veralteten Funktionen nutzt.

  2. Entfernung von veralteten / nicht mehr gepflegten Erweiterungen und SAPIs
    Auch dazu gibt es auf php.net eine entsprechende Liste: https://wiki.php.net/rfc/removal_of_dead_sapis_and_exts.
    Am bedeutendsten dürfte hier wohl die endgültige Entfernung der mysql-Extension sein. Viele ältere Anwendungen nutzen diese Extension direkt oder über einen Abstraktionslayer wie z. B. ADODB (so auch der OXID eShop). Im günstigsten Fall reicht es aus, den Treiber für den Abstraktionslayer von 'mysql' auf 'mysqli' umzustellen (vgl. https://github.com/ADOdb/ADOdb/blob/master/drivers/adodb-mysqli.inc.php).Wird kein Abstraktionslayer verwendet so wird es mit einigem Aufwand verbunden sein, alle Stellen im Code auf mysqli oder PDO umzustellen. Im OXID eShop allerdings reicht es, in der config.inc.php den Parameter $this->dbType von 'mysql' auf 'mysqli' zu ändern.
  3. Änderungen im Error-Handling
    Die Änderungen im Error-Handling gehören definitiv zu den großen Pluspunkten in PHP 7. Unter dem Strich kann man sagen, dass es in PHP 7 kaum noch Errors im üblichen Sinne gibt. An deren Stelle sind nun konsequent Exceptions getreten, die gefangen und sinnvoll verarbeitet werden können - und müssen (sofern man z. B. die Exceptions loggen möchte). Damit haben Entwickler hier nun endlich die schon lange gewünschte Flexibilität im Umgang mit erwarteten oder unerwarteten Fehlerfällen. Zu Details und zur Hierarchie der Exceptions siehe: http://php.net/manual/de/language.errors.php7.php.
  4. Änderungen im Variablen-Handling
    Diese Änderungen betreffen wesentlich einige komplexe und eher selten verwendete Konstrukte, wie z. B. die sog. „variablen Variablen“ (z. B. $$a oder $$foo['bar']). Die meisten von euch werden mit solch nerdigen Ausdrücken vermutlich wenig zu tun haben. Dennoch sei ein kurzer Blick in folgenden Artikel empfohlen, um zumindest zu wissen, worum es hier eigentlich geht: https://wiki.php.net/rfc/uniform_variable_syntax.

 

Fazit:

Bei ScaleCommerce liegt unser Fokus natürlich auf den Performanceverbesserungen von PHP 7. Diese werden wir in den nächsten Wochen im Detail und mit einigen echten Shop-Installationen verschiedener Hersteller testen – und euch die Ergebnisse natürlich mitteilen.
Es sieht aber alles danach aus, dass es unter Performancegesichtspunkten absolut Sinn macht, schnellstmöglich auf PHP 7 umzustellen. Sicherlich werden auch die diversen Softwarehersteller im Laufe der nächsten Wochen darüber informieren, ob und ab wann ihre jeweiligen Applikationen auch unter PHP 7 lauffähig sind. Shopware hat hier bereits grünes Licht gegeben: https://de.shopware.com/shopware-5-serie-die-neue-technik-und-php-7/.

Von OXID gab es m. W. bisher noch kein offizielles Statement zur Kompatibilität mit PHP 7. Für die aktuellen Versionen EE 5.2.5 und PE/CE 4.9.5 werden zur Zeit offenbar nur PHP 5.2, 5.3, 5.4, 5.5 und 5.6 unterstützt (vgl. https://www.oxid-esales.com/de/support-services/dokumentation-und-hilfe/oxid-eshop/releases/releases-2015/oxid-eshop-495525.html). Allerdings scheint es so, dass an den aktuellen OXID-Versionen nur kleinere Änderungen nötig sind, um diese auch für PHP 7 lauffähig zu machen (siehe dazu z. B.: https://github.com/OXID-eSales/oxideshop_ce/pull/247, https://www.zoks.net/kompatibilitat-von-oxid-shop-ce-und-php-7-0/).

Bei ScaleCommerce sind wir bereits dabei, diverse Shopsysteme zusammen mit PHP 7 zu testen. Die Ergebnisse werden wir wie schon erwähnt demnächst im Rahmen unseres Newsletters veröffentlichen. Für unsere Kunden bereiten wir die Umstellung auf PHP 7 bereits vor. Und natürlich sind wir bei Bedarf auch bei der Anpassung der Applikation behilflich, sofern diese noch nicht 100%ig PHP 7 tauglich sein sollte. Von daher: zögert nicht – seid ganz vorne mit dabei und zündet auch ihr den PHP 7 Turbo!

Andreas Ziethen
ScaleCommerce