WebAssembly (Wasm) est une technologie livrée dans tous les navigateurs modernes qui permet aux développeurs de livrer des programmes binaires portables.
Cela signifie que les développeurs peuvent utiliser presque n’importe quel langage de programmation et cibler le web.
Dans le contexte de Discourse, cela ouvre la porte à la livraison d’un ensemble assez riche d’extensions qui n’étaient disponibles que pour les créateurs de plugins par le passé.
Les exemples pourraient être :
- Filigrane / redimensionnement / recadrage d’images
- Génération de graphiques à l’aide de graphviz ou svgbob
- Bac à sable de programmation (par exemple : des publications qui intègrent un runtime Ruby)
- et bien plus encore
Par le passé, en raison de la Politique de sécurité du contenu de Discourse, l’accès à Wasm était désactivé, sauf pour les installations avec des téléchargements locaux et sans CDN.
De nouvelles interfaces ont été ajoutées côté client pour prendre en charge la livraison d’actifs JavaScript dans un thème qui sont inconditionnellement accessibles via le domaine local.
Cela permet aux développeurs de thèmes d’héberger proprement Wasm, le flux est le suivant :
composant → worker web local → Wasm hébergé sur CDN
Discourse svgbob est un exemple de bout en bout des nouveaux modèles, les 2 changements clés sont :
- Tous les actifs
.jssont également rendus disponibles hors CDN sur le serveur local :
{
...
"assets": {
"worker": "assets/will-be-avilable-on-local.js"
}
}
- L’URL de l’actif local est accessible via
settings.theme_uploads_local
Donc, dans l’exemple ci-dessus :
settings.theme_uploads_local.worker ; // actif local
settings.theme_uploads.worker ; // actif cdn