- PHP macht derzeit etwa 75 % der Websites im Internet aus
- PHP ist unter den Programmiersprachen vielleicht nicht der "sexy boy", hat aber seit der Entstehung des Internets eine wichtige Rolle gespielt
- Jetzt lässt sich PHP vollständig mit Wasmer und Wasmer Edge ausführen (Open Beta)
Warum es wichtig ist, PHP auf WebAssembly auszuführen
- Dank der Eigenschaften von WebAssembly lassen sich die Ressourcen, auf die ein Programm zugreifen kann, sicher begrenzen
- PHP kann sicher ausgeführt werden, ohne den Overhead von OS- oder Hardware-Virtualisierung
- Das Wasmer-Team hat unzählige Stunden investiert, damit PHP auf WebAssembly vollständig und so schnell wie möglich läuft
- Durch die Aktivierung von Opcode-Caching innerhalb von WebAssembly wurde eine bis zu 3-fach höhere Geschwindigkeit erreicht
Serverless-ähnliche Skalierbarkeit für PHP-Apps
- Serverless-ähnliche Skalierbarkeit für alle PHP-Apps würde enormen Mehrwert schaffen
- PHP-Apps können am Edge ausgeführt werden, während man nur einen Bruchteil der Preise der Cloud-Anbieter bezahlt
- Mit Wasmer lassen sich alle PHP-Anwendungen ausführen, ohne sich Sorgen machen zu müssen, dass die App aus der Sandbox ausbricht oder schädliche Dinge tut, die sie nicht tun sollte
Die beliebtesten PHP-Frameworks laufen auf Wasmer und Wasmer Edge
- WordPress
- Symfony
- Laravel
- Alle PHP-Templates: https://wasmer.io/templates?language=php
- Hinweis: Die Unterstützung von Wasmer Edge für benutzerdefinierte Dateisystem-Volumes ist in Arbeit. Deployte Apps, die SQLite verwenden (wie WordPress oder Symfony), speichern Datenbankänderungen derzeit nur im Speicher und noch nicht dauerhaft
Das Maximum aus WebAssembly und PHP herausholen
- Mit aktiviertem Opcode-Caching kann WordPress ohne Änderungen 3-mal schneller laufen (von 600 ms auf 200 ms)
Selbst ausprobieren
Technische Meisterleistung
- Es war nicht einfach, PHP in Wasmer auf WebAssembly vollständig zum Laufen zu bringen
- Beim Nachverfolgen des Prozesses wurden viele Probleme gelöst:
- Ein obskurer Bug wurde entdeckt, bei dem im longjmp/setjmp-Implementierungsweg, der für try/catch-Anweisungen in PHP benötigt wird, der Stack überschrieben und nicht korrekt wiederhergestellt wurde
- Ein Bug wurde entdeckt und behoben, der ausgehende HTTP-Aufrufe 10-mal langsamer machte
- PHP opcache wurde standardmäßig aktiviert, um eine bis zu 3-fach schnellere PHP-Ausführung zu erreichen
- Viele kleine Korrekturen an der Dateisystem-Virtualisierungsschicht und beim Networking (IPv6)
- Wer dem früheren Blogpost zum Ausführen von WordPress mit Wasmer gefolgt ist, weiß, dass zahlreiche Codeänderungen (also Hacks) nötig waren, um das Verhalten von WordPress zu verändern und blockierende Edge Cases nicht auszulösen
- In der neuesten Wasmer-Version laufen WordPress, Laravel und Symfony ohne jegliche Codeänderungen auf Wasmer
Geschwindigkeit
- Es reichte nicht, PHP einfach mit Basisspeed auszuführen; das Ziel war, es auf WebAssembly so schnell wie möglich laufen zu lassen
- PHP verfügt über das Zend Opcache-Modul, das die Ausführung deutlich beschleunigt
- Das Opcode-Caching-Modul optimiert und cached den Bytecode, in den PHP-Quellcode umgewandelt wird, und spart so Zeit beim AST-Parsing bereits verarbeiteter Dateien
- Da Opcode-Caching die Zahl der Requests, die eine App verarbeiten kann, um das 3-Fache steigern kann, lag es nahe, es auch auf WebAssembly zu aktivieren
- Allerdings waren Opcode-Caching (und das Laden von Zend-Modulen) standardmäßig deaktiviert, da dafür
dlopen, dlsym usw. benötigt werden, die in Wasm nicht verfügbar sind
- Deshalb begann eine ungewöhnliche Quest: Opcode-Caching in PHP aktivieren
- Nach Recherchen wurde ein neuer Weg zur statischen Verlinkung gefunden; dabei mussten zahlreiche Dinge angepasst werden, am Ende funktionierte es jedoch
- WordPress-Timing in Wasm ohne Opcache: ~620 ms
- WordPress-Timing in Wasm mit aktiviertem Opcache: ~205 ms
- Allein das Aktivieren von Opcache bringt also einen 3-fachen Performancegewinn!
- Es wurde klar, dass es noch viele weitere Verbesserungsmöglichkeiten gibt, um PHP näher an native Geschwindigkeit zu bringen (bleibt dran!)
Weitere Chancen eröffnen sich
- Das eröffnet zusätzliche Möglichkeiten für Projekte wie WordPress Playground, die derzeit auf Emscripten angewiesen sind, um PHP im Browser auszuführen
- Solche Projekte könnten zu Paketen werden, die sowohl im Browser als auch am Edge laufen
- Ein völlig neuer Ansatz für Cold Starts ist in Vorbereitung (Cloudflare & Fly.io, wir haben euch im Blick!)
- Für den Edge-Markt steht eine spannende Zeit bevor
2 Kommentare
Ich finde es persönlich irgendwie beeindruckend und auch erstaunlich, dass PHP immer noch so intensiv genutzt wird. Haha. Nach der Zeit, in der es einen schlechten Ruf hatte, soll sich inzwischen vieles verändert haben, und ich bekomme sogar Lust, PHP noch einmal auszuprobieren.
Sowohl auf Hacker News als auch auf GeekNews gibt es viele, die PHP nicht mögen, haha.
Ich glaube aber, dass es weiter genutzt wird, solange das Web als Technologie nicht vollständig durch etwas anderes ersetzt wird.
Ich denke, man sollte sich nicht auf die „Sprache“ konzentrieren, sondern es als eine der Technologien betrachten, die gut zum „Web“ passen.