Discourse veröffentlicht jetzt vorkompilierte JavaScript-Assets, was die Installation und Updates erheblich beschleunigt, insbesondere für Server mit begrenzten Ressourcen.
Das Kompilieren und Optimieren von JavaScript-Assets war schon immer einer der ressourcenintensivsten Teile des Betriebs von Discourse. Da sich unsere Codebasis und das JavaScript-Ökosystem weiterentwickelt haben, ist dieser Prozess noch anspruchsvoller geworden.
In unseren Tests reduzieren diese Änderungen die Zeit für das Erstellen von Assets auf einem Digital Ocean Droplet mit 1 GB RAM von 45 Minuten auf nur 3 Minuten.
Wie funktioniert das?
Bei jedem Commit, der in main zusammengeführt wird, erstellt ein GitHub Actions Workflow die Assets und bündelt sie in .tar.gz-Dateien (eine für die Produktion, eine für die Entwicklung). Diese Bundles werden über GitHub Releases in einem dedizierten Repository veröffentlicht. Wir stellen sicher, dass die Assets veröffentlicht werden, bevor ein Commit zu tests-passed wechselt.
Beim Erstellen Ihrer eigenen Website prüft Discourse nun auf ein passendes vorkompiliertes Bundle und lädt es herunter. Plugins werden dann darauf aufgebaut. Wenn kein Bundle gefunden wird oder ein Fehler auftritt, greift Discourse auf das Erstellen aus dem Quellcode zurück.
Beeinträchtigt dies Endbenutzer?
Nein. Assets werden weiterhin von Ihrem eigenen Server / CDN an Endbenutzer ausgeliefert.
Kann ich mich abmelden?
Ja! Wenn Sie es vorziehen, Ihre eigenen Assets zu erstellen und über einen ausreichend leistungsfähigen Server verfügen, setzen Sie DISCOURSE_DOWNLOAD_PRE_BUILT_ASSETS: 0 in Ihrer app.yml-Datei.
Was ist, wenn ich eine geforkte oder gepatchte Version von Discourse ausführe?
Asset-Bundles werden nach dem Commit-Hash benannt. Wenn Sie einen Fork ausführen, wird kein Bundle gefunden und die Assets werden aus dem Quellcode erstellt. Wenn Ihre Discourse-Kopie gepatcht ist (d. h. der Git-Arbeitsbaum ist nicht sauber), versucht Discourse nicht, ein Bundle herunterzuladen.
Was ist mit anderen Asset-bezogenen Build-Schritten?
Derzeit gilt diese Optimierung nur für Kern-JS-Assets. In Zukunft könnten wir sie auf einige Plugins und andere Schritte wie gz/brotli-Kompression ausweiten.
Was ist mit dem stabilen Branch?
Vorkompilierte Assets für den stabilen Branch werden ab dem nächsten Major-Versionssprung veröffentlicht, der für August 2025 geplant ist.