Mit WordPress Playground und WebAssembly browserinterne WordPress-Erlebnisse erstellen

Die vollständige WordPress-Version basierend auf PHP, die mit WebAssembly ausschließlich im Browser ausgeführt wird

Thomas Nattestad
Thomas Nattestad

Wenn Sie WordPress Playground zum ersten Mal sehen, wie eine gewöhnliche Website – vielleicht abgesehen vom farbigen Hintergrund. Alles ist möglich aber. Sie sehen einen kompletten WordPress-Technologie-Stack, einschließlich PHP und einer Datenbank, die direkt in Ihrem Browser ausgeführt werden.

In diesem Beitrag sind Adam Zieliński (Leiter von WordPress Playground) und Thomas Nattestad (Produktmanager für V8) Explore:

  • Hier erfahren Sie, wie WordPress Playground Sie als WordPress-Entwickler unterstützen kann.
  • Funktionsweise im Hintergrund
  • Was bedeutet das für die Zukunft von WordPress?

WordPress ohne Installation nutzen, in Apps einbetten und sogar mit JavaScript steuern

Sie können die unter playground.wordpress.net kostenlos herunterladen. Es gibt Es gibt keine Cloud-Infrastruktur und keinen Support, für den man zahlen muss, da die Website ausschließlich in Ihrem Browser angezeigt wird. Es ist außerdem temporär. Sobald Sie aktualisiere die Seite, da ist sie nicht mehr da. Sie können beliebig viele dieser Websites für Prototyping, Ausprobieren von Plug-ins und schnelles Entwickeln von Ideen.

Sie können sie sogar verwenden, um Ihren Code mit der Methode integrierten Versionswechsler für PHP und WordPress:

phpinfo-Seite an.

WordPress Playground ist eine völlig neue Art, WordPress zu verwenden. Seine volle Leistung, wird jedoch nur entsperrt, indem Sie es in Ihre App aufnehmen. Der einfachste Weg ist, WordPress Playground in einem <iframe> und konfiguriere es mithilfe der Abfrageparameter API verwenden. Das ist die offizielle Präsentation macht. Wenn Sie beispielsweise das Feld Anhängerdesign und die Coblocks-Plug-in, der eingebettete iFrame so aktualisiert, dass sie auf https://playground.wordpress.net/?theme=pendant&amp;plugin=coblocks.

WordPress Playground-Präsentation

Der iFrame erleichtert den Einstieg, ist aber auch auf Basiskonfigurationsoption auswählen. Wenn Sie mehr brauchen, gibt es noch eine weitere, leistungsstarke API nutzen.

Der JavaScript-Client von WordPress Playground ermöglicht die vollständige Kontrolle über die eingebettete Website.

Sie können die gesamte WordPress-Website einschließlich Dateisystem und PHP unter Verwendung der vollständigen API, die über die @wp-playground/client npm Paket. Im folgenden Beispiel sehen Sie, wie Sie sie verwenden – prüfen Sie die interaktive Anleitung finden Sie weitere Beispiele:

import {
  connectPlayground,
  login,
  connectPlayground,
} from '@wp-playground/client';

const client = await connectPlayground(
  document.getElementById('wp'), // An iframe
  { loadRemote: 'https://playground.wordpress.net/remote.html' },
);
await client.isReady();

// Login the user as admin and go to the post editor:
await login(client, 'admin', 'password');
await client.goTo('/wp-admin/post-new.php');

// Run arbitrary PHP code:
await client.run({ code: '<?php echo "Hi!"; ?>' });

// Install a plugin:
const plugin = await fetchZipFile();
await installPlugin(client, plugin);

WebAssembly PHP auch ohne WordPress verwenden

WordPress Playground ist kein Monolith. WebAssembly PHP wird veröffentlicht unabhängig von WordPress und können auch separat verwendet werden. Im Web Sie können das npm von @php-wasm/web verwenden ist für eine geringe Bundle-Größe optimiert und in Node.js können Sie unter @php-wasm/node mit einer weitere PHP-Erweiterungen. Adam hat mit Ersterem interaktive PHP-Snippets hinzugefügt. dieser WP_HTML_Tag_Processor-Anleitung. Hier ein kleiner Vorgeschmack auf die Verwendung:

import { PHP } from '@php-wasm/web';
const php = await PHP.load('8.0', {
  requestHandler: {
    documentRoot: '/www',
  },
});

// Create and run a script directly
php.mkdirTree('/www');
php.writeFile('/www/index.php', `<?php echo "Hello " . $_POST['name']; ?>`);
php.run({ scriptPath: '/www/index.php' });

// Or use the familiar HTTP concepts:
const response = php.request({
  method: 'POST',
  relativeUrl: '/index.php',
  data: { name: 'John' },
});
console.log(response.text); // Hello John

An diesem Punkt müssen Sie sich Gedanken darüber machen, wie das funktioniert. Gute Frage. Sehen wir uns das Ganze einmal genauer an. Anschnallen!

Hinter den Kulissen gibt es WebAssembly PHP, einen SQL-Übersetzer und einen browserinternen Server

PHP wird als WebAssembly-Binärprogramm ausgeführt

PHP funktioniert nicht einfach standardmäßig im Browser. WordPress Playground entwickelt: dedizierte Pipeline den PHP-Interpreter in WebAssembly zu entwickeln mit Emscripten. Die Entwicklung von PHP- ganz einfach ist nicht allzu komplex – man braucht nur hier eine Funktionssignatur anpassen, hier eine Konfigurationsvariable erzwingen, und die Anwendung einige kleine Stellen. So können Sie sie selbst erstellen:

git clone https://github.com/WordPress/wordpress-playground
cd wordpress-playground && npm install
# Below, you can replace "8.2" with any other valid PHP version number.
npm run recompile:php:web:8.2

Einfache PHP-Builds sind im Browser jedoch nicht sehr nützlich. Als Server verfügt PHP über keine JavaScript-API, um den Anfragetext zu übergeben, oder den php://stdin-Stream füllen. WordPress Playground entwickelte von Grund auf erstellen. Das WebAssembly-Binärprogramm enthält eine dediziertes PHP API-Modul geschrieben in C und a JavaScript PHP-Klasse, die Methoden wie writeFile() oder run() bereitstellt.

Da jede PHP-Version nur eine statische .wasm-Datei ist, kann die PHP-Version ist ziemlich langweilig. Es weist den Browser lediglich auf, die Datei herunterzuladen, Beispiel: php_7_3.wasm statt php_8_2.wasm.

Datenbank wird mit einer SQL-Übersetzungsebene unterstützt

WordPress erfordert MySQL. Es gibt jedoch keine WebAssembly-Version von MySQL. die Sie im Browser ausführen könnten. WordPress Playground liefert daher PHP mit dem nativen SQLite-Treiber und auf SQLite.

Aber wie kann WordPress in einer anderen Datenbank ausgeführt werden?

Hinter den Kulissen SQLite-Datenbankintegration Das Plug-in fängt alle MySQL-Abfragen ab und schreibt sie in SQLite-Dialekt. Die 2.0 Schiffe entlassen eine neue, auf WordPress Playground basierende Übersetzungsebene ermöglicht es WordPress auf SQLite 99% der WordPress-Einheitentestsuite zu bestehen.

Der Webserver befindet sich innerhalb des Browsers

In einer herkömmlichen WordPress-Website wird durch einen Klick auf einen Link wie Blog eine HTTP- -Anfrage an das Remote-Back-End, um die Seite blog abzurufen. WordPress Playground hat kein Remote-Backend. Es hat eine Service Worker fängt alle ausgehenden Anfragen ab und übergibt sie an einen PHP-Server im Browser. in einer separaten Instanz Web Worker.

Flussdiagramm, das mit einem iFrame beginnt, der auf die Ressource „wp-admin“ verweist. Aufrufe werden vom Service Worker abgefangen, im Worker-Thread gerendert und schließlich vom Browserserver in eine WordPress-Antwort übersetzt.

Netzwerke werden über WebSockets unterstützt

Im Networking-Bereich sind WebAssembly-Programme auf das Aufrufen von JavaScript-APIs. Dies ist eine Sicherheitsfunktion, stellt aber auch eine Herausforderung dar. Wie Sie unterstützen synchronen Low-Level-Netzwerkcode, der von PHP mit dem ob es sich um allgemeine asynchrone APIs in JavaScript handelt?

Für WordPress Playground beinhaltet die Antwort einen WebSocket-zu-TCP-Socket-Proxy, Asynchronisieren und umfassende Patches PHP-Interna wie php_select. Es ist komplex, aber es gibt eine Belohnung. Die Ein auf Node.js ausgerichteter PHP-Build kann Web-APIs anfordern, Composer-Pakete installieren und und sogar eine Verbindung zu einem MySQL-Server herstellen.

WordPress kann an noch mehr Stellen genutzt werden als im Browser

Da WordPress jetzt auf WebAssembly ausgeführt werden kann, lässt es sich auch in einem Node.js-Skript ausführen. – es ist dieselbe V8-Engine! Natürlich können Sie bei StackBlitz auch Node.js direkt im Browser, sodass Sie WordPress und PHP ausführen können in WebAssembly kompiliert und in Node.js ausgeführt, das ebenfalls zu WebAssembly wird ausgeführt im Browser. WebAssembly wird auch im serverlosen Bereich und in der und in Zukunft auch auf dieser Infrastruktur laufen könnte.

In Zukunft werden WordPress-Apps möglicherweise ohne Einrichtung, interaktiv und für die Zusammenarbeit angeboten.

Stellen Sie sich vor, Sie würden direkt in einem Code-Editor Gebäude sofort erstellt und die Einrichtung ist abgeschlossen. Sie können sogar ein und eine Multiplayer-Bearbeitungssitzung starten, z. B. in Google Docs. Und Wenn Sie fertig sind, ist es mit nur einem Klick erledigt, Kreationen mit einer Vielzahl von Hosting-Diensten – und das alles, ohne dass Sie jemals etwas installieren müssen. lokal!

Und das ist nur eine kleine Kleinigkeit. Es gibt interaktive Tutorials, Live-Plug-in-Demos, Staging-Websites, dezentralisiertes WordPress auf Edge-Servern und sogar auf Ihrem Handy.

Die Zukunft ist spannend und du kannst ein Teil davon sein! Deine Ideen und Beiträge sind der Sauerstoff von WordPress Playground. Besuchen Sie GitHub-Repository, z. B. hallo im #meta-playground den Slack-Kanal von WordPress.org. wenden Sie sich bitte unter adam@adamziel.com an Adam.