Discourse publie désormais des actifs JavaScript précompilés, ce qui accélérera considérablement l’installation et les mises à jour, en particulier pour les serveurs disposant de ressources limitées.
La compilation et l’optimisation des actifs JavaScript ont toujours été l’une des parties les plus gourmandes en ressources de l’exécution de Discourse. Au fur et à mesure que notre base de code et l’écosystème JavaScript ont évolué, ce processus est devenu encore plus exigeant.
Lors de nos tests, ces changements réduisent le temps de construction des actifs sur une instance Digital Ocean de 1 Go de RAM de 45 minutes à seulement 3 minutes.
Comment ça marche ?
À chaque commit fusionné dans main, un workflow GitHub Actions construit et regroupe les actifs dans des fichiers .tar.gz (un pour la production, un pour le développement). Ces bundles sont publiés via les releases GitHub dans un dépôt dédié. Nous nous assurons que les actifs sont publiés avant que tout commit ne passe à tests-passed.
Lors de la construction de votre propre site, Discourse recherche désormais un bundle précompilé correspondant et le télécharge. Les plugins sont ensuite construits par-dessus. Si aucun bundle n’est trouvé ou s’il y a une erreur, Discourse revient à la construction à partir des sources.
Cela a-t-il un impact sur les utilisateurs finaux ?
Non. Les actifs sont toujours servis aux utilisateurs finaux depuis votre propre serveur / CDN.
Puis-je refuser ?
Oui ! Si vous préférez construire vos propres actifs et disposez d’un serveur suffisamment puissant, définissez DISCOURSE_DOWNLOAD_PRE_BUILT_ASSETS: 0 dans votre fichier app.yml.
Que se passe-t-il si j’exécute une version forkée ou patchée de Discourse ?
Les bundles d’actifs sont nommés par le hash du commit. Si vous exécutez un fork, aucun bundle ne sera trouvé et les actifs seront construits à partir des sources. Si votre copie de Discourse est patchée (c’est-à-dire que la zone de travail git n’est pas propre), Discourse ne tentera pas de télécharger un bundle.
Qu’en est-il des autres étapes de construction liées aux actifs ?
Actuellement, cette optimisation s’applique uniquement aux actifs JS principaux. À l’avenir, nous pourrions l’étendre à certains plugins et à d’autres étapes comme la compression gz/brotli.
Qu’en est-il de la branche stable ?
Les actifs précompilés pour la branche stable seront publiés à partir de la prochaine mise à jour majeure de version, prévue pour août 2025.