WebAssembly (Wasm) è una tecnologia che viene distribuita in tutti i browser moderni e consente agli sviluppatori di distribuire programmi binari portatili.
Ciò significa che gli sviluppatori possono utilizzare quasi tutti i linguaggi di programmazione e avere come target il web.
Nel contesto di Discourse, ciò apre le porte alla distribuzione di un set piuttosto ricco di estensioni che in passato erano disponibili solo per i creatori di plugin.
Esempi potrebbero essere:
- Filigranatura / ridimensionamento / ritaglio di immagini
- Generazione di grafici utilizzando graphviz o svgbob
- Sandbox di programmazione (ad esempio: post che incorporano un runtime Ruby)
- e molto altro
In passato, a causa della Content Security Policy di Discourse, l’accesso a Wasm era bloccato, ad eccezione delle installazioni con caricamenti locali e senza CDN.
Sono state aggiunte nuove interfacce al lato client per supportare la distribuzione di asset JavaScript in un tema che sono raggiungibili incondizionatamente tramite dominio locale.
Ciò consente agli sviluppatori di temi di ospitare Wasm in modo pulito, il flusso è:
componente → worker web locale → Wasm ospitato su CDN
Discourse svgbob è un esempio end-to-end dei nuovi pattern, le 2 modifiche chiave sono:
- Tutti gli asset
.jssono resi disponibili anche fuori CDN sul server locale:
{
...
"assets": {
"worker": "assets/will-be-avilable-on-local.js"
}
}
- L’URL per l’asset locale è accessibile tramite
settings.theme_uploads_local
Quindi nell’esempio sopra:
settings.theme_uploads_local.worker; // asset locale
settings.theme_uploads.worker; // asset cdn