WebAssembly (Wasm) ist eine Technologie, die in allen modernen Browsern verfĂŒgbar ist und es Entwicklern ermöglicht, portable BinĂ€rprogramme auszuliefern.
Dies bedeutet, dass Entwickler fast jede Programmiersprache verwenden und das Web als Ziel haben können.
Im Kontext von Discourse eröffnet dies die Möglichkeit, eine ganze Reihe von Erweiterungen auszuliefern, die in der Vergangenheit nur fĂŒr Plugin-Ersteller verfĂŒgbar waren.
Beispiele hierfĂŒr könnten sein:
- Bild-Wasserzeichen / -GröĂenĂ€nderung / -Zuschneidung
- Graph-Generierung mit graphviz oder svgbob
- Programmier-Sandboxes (z. B. BeitrÀge, die eine Ruby-Laufzeitumgebung einbetten)
- und vieles mehr
In der Vergangenheit wurde aufgrund der Discourse Content Security Policy der Zugriff auf Wasm gesperrt, auĂer bei Installationen mit lokalen Uploads und ohne CDN.
Neue Schnittstellen wurden auf der Client-Seite hinzugefĂŒgt, um die Auslieferung von JavaScript-Assets in einem Theme zu unterstĂŒtzen, die ĂŒber die lokale Domain bedingungslos erreichbar sind.
Dies ermöglicht Theme-Entwicklern, Wasm sauber zu hosten. Der Ablauf ist:
Komponente â lokaler Web Worker â Wasm gehostet auf CDN
Discourse svgbob ist ein End-to-End-Beispiel fĂŒr die neuen Muster. Die 2 wichtigsten Ănderungen sind:
- Alle
.js-Assets werden auch abseits des CDN auf dem lokalen Server verfĂŒgbar gemacht:
{
...
"assets": {
"worker": "assets/will-be-avilable-on-local.js"
}
}
- Die URL fĂŒr das lokale Asset ist ĂŒber
settings.theme_uploads_localzugÀnglich.
Im obigen Beispiel also:
settings.theme_uploads_local.worker; // lokales Asset
settings.theme_uploads.worker; // CDN-Asset