WebAssembly (Wasm) es una tecnología que se incluye en todos los navegadores modernos y que permite a los desarrolladores distribuir programas binarios portátiles.
Esto significa que los desarrolladores pueden usar casi cualquier lenguaje de programación y tener como objetivo la web.
En el contexto de Discourse, esto abre la puerta a la distribución de un conjunto bastante rico de extensiones que en el pasado solo estaban disponibles para los creadores de plugins.
Los ejemplos podrían ser:
- Marca de agua / redimensionamiento / recorte de imágenes
- Generación de gráficos usando graphviz o svgbob
- Entornos de programación aislados (por ejemplo: publicaciones que incrustan un tiempo de ejecución de Ruby)
- y mucho más
En el pasado, debido a la Política de Seguridad de Contenido de Discourse, el acceso a Wasm se cerró excepto para instalaciones con cargas locales y sin CDN.
Se agregaron nuevas interfaces al lado del cliente para admitir la distribución de activos de JavaScript en un tema que son incondicionalmente accesibles a través del dominio local.
Esto permite a los desarrolladores de temas alojar Wasm de manera limpia, el flujo es:
componente → trabajador web local → Wasm alojado en CDN
Discourse svgbob es un ejemplo de extremo a extremo de los nuevos patrones, los 2 cambios clave son:
- Todos los activos
.jstambién están disponibles fuera de la CDN en el servidor local:
{
...
"assets": {
"worker": "assets/will-be-avilable-on-local.js"
}
}
- La URL del activo local es accesible a través de
settings.theme_uploads_local
Entonces, en el ejemplo anterior:
settings.theme_uploads_local.worker; // activo local
settings.theme_uploads.worker; // activo cdn