Discourse теперь публикует заранее собранные JavaScript-ресурсы, что значительно ускорит установку и обновления, особенно для серверов с ограниченными ресурсами.
Компиляция и оптимизация JavaScript-ресурсов всегда были одной из самых ресурсоемких задач при работе с Discourse. По мере развития нашей кодовой базы и экосистемы JavaScript этот процесс стал еще более требовательным.
В наших тестах эти изменения сократили время сборки ресурсов на виртуальном сервере Digital Ocean с 1 ГБ ОЗУ с 45 минут до всего 3 минут.
Как это работает?
При каждом коммите, слитом в ветку main, рабочий процесс GitHub Actions собирает и упаковывает ресурсы в файлы .tar.gz (один для продакшена, один для разработки). Эти пакеты публикуются через релизы GitHub в специальном репозитории. Мы гарантируем публикацию ресурсов до того, как любой коммит перейдет в статус tests-passed.
При создании собственного сайта Discourse теперь проверяет наличие соответствующего заранее собранного пакета и загружает его. Затем поверх него собираются плагины. Если пакет не найден или произошла ошибка, Discourse возвращается к сборке из исходного кода.
Влияет ли это на конечных пользователей?
Нет. Ресурсы по-прежнему предоставляются конечным пользователям с вашего собственного сервера или CDN.
Можно ли отказаться от этой функции?
Да! Если вы предпочитаете собирать ресурсы самостоятельно и у вас достаточно мощный сервер, установите DISCOURSE_DOWNLOAD_PRE_BUILT_ASSETS: 0 в вашем файле app.yml.
Что если я использую форк или модифицированную версию Discourse?
Пакеты ресурсов именуются по хешу коммита. Если вы используете форк, пакет не будет найден, и ресурсы будут собираться из исходного кода. Если ваша копия Discourse модифицирована (т. е. рабочее дерево git не чистое), Discourse не попытается загрузить пакет.
А как насчет других шагов сборки, связанных с ресурсами?
На данный момент эта оптимизация применяется только к основным JS-ресурсам. В будущем мы можем расширить её на некоторые плагины и другие шаги, такие как сжатие gz/brotli.
А как насчет стабильной ветки?
Заранее собранные ресурсы для стабильной ветки будут публиковаться начиная со следующего крупного обновления версии, запланированного на август 2025 года.