Weniger Abstürze in Chrome: Umstellung von PHP-WASM auf JSPI für stabileren Betrieb
Haben Sie sich jemals gefragt, warum Ihre WordPress-Seite in Chrome manchmal unerwartete Abstürze verursacht? Die Antwort könnte in der Art und Weise liegen, wie asynchroner JavaScript-Code im Hintergrund arbeitet. Die gute Nachricht: Es gibt eine Lösung, die das Erlebnis für Chrome-Nutzer deutlich verbessern könnte: JSPI.
Das Problem mit Asyncify: Warum es zu Abstürzen kommt
Bisher verwendete PHP-WASM (WebAssembly) die Technologie Asyncify, um asynchrone JavaScript-Funktionen aus synchronem WebAssembly-Code aufzurufen. Das Problem dabei: Asyncify benötigt eine umfassende Liste aller C-Funktionen, die sich im Callstack befinden können, wenn ein asynchroner Aufruf erfolgt.
Wird eine Funktion in dieser Liste vergessen, führt das zu einem fatalen Absturz mit der Meldung "unreachable WASM instruction executed". Diese Abstürze werden von Nutzern häufig gemeldet und beeinträchtigen das Benutzererlebnis. Die unten aufgeführten Probleme verdeutlichen die Dringlichkeit einer Lösung.
- WooCommerce Abstürze (#967)
- Bestellungen in WooCommerce nicht möglich, wenn HPOS aktiviert ist (#731)
- PHP-WASM: Verbesserung der Phar-Unterstützung (Asyncify-Fehler – Null-Funktion oder Funktionssignatur-Fehlpaarung) (#1241)
- Curl-Erweiterung für den Node.js-Build von PHP.wasm (#1273)
- Hinzufügen von PHP-Iterator- und Yield-Unterstützung (#1181)
- Behebung von Herunterfahrfehlern (#1104)
- PHP: Hinzufügen von zif_array_filter zur Asyncify-Liste (#397)
JSPI als Lösung: Kleinere Binärdateien und weniger Abstürze
JSPI (JavaScript Promise Integration) ist ein neueres API, das dieses Problem elegant löst. JSPI macht die Wartung einer solch umfangreichen Liste überflüssig und erzeugt gleichzeitig kleinere und schnellere Binärdateien. Die Umstellung auf JSPI verspricht also nicht nur weniger Abstürze, sondern auch eine verbesserte Performance.
Der Plan: JSPI für Chrome, Asyncify für alle anderen
Um möglichst schnell von den Vorteilen von JSPI zu profitieren, wird folgender Ansatz verfolgt:
- JSPI-Version für Chrome: Chrome-Nutzer erhalten die JSPI-Version des "Kitchen Sink"-Bundles (ein umfassendes Paket mit allen Funktionen).
- Asyncify-Version für alle anderen: Alle anderen Browser und Umgebungen (z.B. Firefox, Safari, Node.js) erhalten weiterhin die Asyncify-Version.
Dieser Ansatz ermöglicht es, die Vorteile von JSPI in Chrome sofort zu nutzen, während gleichzeitig die Kompatibilität mit anderen Browsern und Umgebungen gewährleistet wird. Die Node.js-Umgebung wird vorerst auf Asyncify belassen.
Die Vorteile auf einen Blick: Was bringt die Umstellung auf JSPI?
Die Umstellung auf JSPI bietet mehrere Vorteile:
- Weniger Abstürze für Chrome-Nutzer: Die Hauptursache für Abstürze im Zusammenhang mit Asyncify wird eliminiert.
- Einfacherer Übergang für andere Browser: Sobald andere Browser JSPI unterstützen, können diese Benutzer problemlos auf die JSPI-Version umgestellt werden.
Aktueller Stand der JSPI-Unterstützung (Stand: 29. April 2024)
- ✅ Google Chrome: JSPI wird unterstützt, wenn
#enable-experimental-webassembly-jspi
inchrome://flags
aktiviert ist oder die JSPI Origin Trial aktiviert wurde. - ✅ Node.js v22+: JSPI wird unterstützt mit dem Feature-Flag
--experimental-wasm-stack-switching
. - ✅ Firefox Nightly: JSPI wird in der Nightly-Version von Firefox unterstützt.
- ❌ Safari, ältere Browser: JSPI wird nicht unterstützt.
- ❌ Bun, Node.js <= 21: JSPI wird nicht unterstützt.
- ❔ Chrome-basierte Browser: Der Status der JSPI-Unterstützung ist unklar.
Fazit: Ein Schritt in Richtung stabilerer WordPress-Erfahrung
Die Umstellung auf JSPI für Chrome-Nutzer ist ein wichtiger Schritt, um die Stabilität und Performance von WordPress-Anwendungen zu verbessern. Indem die Ursache für viele Abstürze beseitigt wird, wird das Benutzererlebnis deutlich verbessert. Bleiben Sie gespannt auf weitere Updates, sobald die JSPI-Unterstützung in anderen Browsern und Umgebungen Einzug hält.