WebAssembly (Wasm) — это технология, встроенная во все современные браузеры, которая позволяет разработчикам распространять переносимые двоичные программы.
Это означает, что разработчики могут использовать практически любой язык программирования и ориентироваться на веб.
В контексте Discourse это открывает возможность распространения довольно широкого набора расширений, которые ранее были доступны только создателям плагинов.
Примеры могут включать:
- Добавление водяных знаков к изображениям / изменение их размера / кадрирование
- Генерацию графиков с помощью graphviz или svgbob
- Песочницы для программирования (например, посты, встраивающие среду выполнения Ruby)
- и многое другое
Ранее из-за политики безопасности контента (CSP) в Discourse доступ к Wasm был заблокирован, за исключением установок с локальными загрузками и без CDN.
В клиентскую часть были добавлены новые интерфейсы для поддержки распространения JavaScript-активов в теме, которые всегда доступны через локальный домен.
Это позволяет разработчикам тем аккуратно размещать Wasm; процесс выглядит следующим образом:
компонент → локальный веб-воркер → Wasm, размещённый на CDN
Discourse svgbob — это пример сквозной реализации новых паттернов. Два ключевых изменения:
- Все
.js-активы также доступны не только через CDN, но и на локальном сервере:
{
...
"assets": {
"worker": "assets/will-be-avilable-on-local.js"
}
}
- URL локального актива доступен через
settings.theme_uploads_local
Таким образом, в приведённом выше примере:
settings.theme_uploads_local.worker; // локальный актив
settings.theme_uploads.worker; // актив с CDN