9 Punkte von xguru 2024-05-27 | 2 Kommentare | Auf WhatsApp teilen
  • 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

  • Wenn man normalerweise php -S localhost:8000 . ausführt, kann man es jetzt vollständig sandboxed über Wasmer laufen lassen:
    wasmer run php/php --mapdir:/app:. -- /app -S localhost:8000  
    
  • Auch WordPress lässt sich lokal einfach ausführen. Nach dem Klonen des WordPress-Repositorys im Root-Verzeichnis wasmer run . --net ausführen (erfordert Wasmer 4.3.1)
  • Es steht eine vollständig funktionsfähige PHP-CLI zur Verfügung, die komplett sandboxed auf dem Server läuft
  • Man muss sich keine Sorgen mehr machen, dass eine App auf Dinge wie /etc/passwd zugreift

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

 
tsboard 2024-05-28

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.

 
xguru 2024-05-29

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.