Leistungsbudgets in Ihren Build-Prozess einbinden

Nachdem Sie ein Leistungsbudget festgelegt haben, müssen Sie den Build-Prozess einrichten, um es im Blick zu behalten. Mit einer Reihe von Tools können Sie Schwellenwerte für ausgewählte Leistungsmesswerte festlegen und sich benachrichtigen lassen, wenn Sie das Budget überschreiten. Hier erfahren Sie, wie Sie die Option auswählen, die Ihren Anforderungen und Ihrer aktuellen Konfiguration am besten entspricht. 🕵️‍♀️

Lighthouse-Leistungsbudgets

Lighthouse ist ein Analysetool, mit dem Websites in einigen wichtigen Bereichen geprüft werden: Leistung, Barrierefreiheit, Best Practices und Leistung als progressive Webanwendung.

Mit der Befehlszeilenversion von Lighthouse (Version 5 und höher) können Sie Leistungsbudgets auf Basis folgender Daten festlegen:

  • Ressourcengröße
  • Anzahl der Ressourcen

Sie können Budgets für die folgenden Ressourcentypen festlegen:

  • document
  • font
  • image
  • media
  • other
  • script
  • stylesheet
  • third-party
  • total

Budgets werden in einer JSON-Datei festgelegt. Nach der Definition sehen Sie in der neuen Spalte „Über Budget“, ob Sie Limits überschreiten.

Abschnitt „Budgets“ im Lighthouse-Bericht
Abschnitt „Budgets“ im Lighthouse-Bericht

Hinweise zur Leistung von Webpack

Webpack ist ein leistungsstarkes Build-Tool, mit dem Sie die Bereitstellung Ihres Codes für die Nutzer optimieren können. Außerdem können Leistungsbudgets auf Grundlage der Asset-Größe festgelegt werden.

Aktivieren Sie Leistungshinweise in webpack.config.js, um Befehlszeilenwarnungen oder -fehler zu erhalten, wenn Ihre Bundle-Größe das Limit überschreitet. So können Sie die Asset-Größen während der Entwicklung im Auge behalten.

Nach dem Build-Schritt gibt webpack eine farbcodierte Liste der Assets und ihrer Größen aus. Überschreitungen des Budgets werden gelb hervorgehoben.

Webpack-Ausgabe mit hervorgehobenem „bundle.js“
Das hervorgehobene bundle.js ist größer als Ihr Budget

Das Standardlimit für Assets und Einstiegspunkte beträgt 250 KB. Sie können in der Konfigurationsdatei eigene Ziele festlegen.

Warnung zur Größe des Webpack-Bundles
Warnung zur Webpack-Bundle-Größe ⚠️

Die Budgets werden mit den nicht komprimierten Asset-Größen verglichen. Die Größe des nicht komprimierten JavaScript-Codes hängt mit der Ausführungszeit zusammen. Die Ausführung großer Dateien kann insbesondere auf Mobilgeräten sehr lange dauern.

Empfehlung zur Leistungsoptimierung von Webpack
Bonusfunktion: Webpack warnt dich nicht nur, sondern gibt dir auch eine Empfehlung zur Verkleinerung deiner Sets. 💁

Bundlesize

Bundlesize ist ein einfaches npm-Paket, mit dem die Asset-Größe anhand eines von Ihnen festgelegten Grenzwerts getestet wird. Sie kann lokal ausgeführt und in Ihre CI-Umgebung eingebunden werden.

Bundlesize-Befehlszeile

Führen Sie die Bundlesize-CLI aus. Geben Sie dazu einen Schwellenwert und die Datei an, die Sie testen möchten.

bundlesize -f "dist/bundle.js" -s 170kB

„Bundlesize“ gibt farbcodierte Testergebnisse in einer Zeile aus.

Fehlgeschlagener Befehlszeilentest für die Bundle-Größe
CLI-Test für Bundle-Größe fehlgeschlagen ❌
CLI-Test für Bundle-Größe bestanden
CLI-Test für Bundle-Größe erfolgreich durchlaufen ✔️

Bundle-Größe für CI

Sie können die Funktion „bundlesize“ am besten nutzen, wenn Sie sie in eine CI-Umgebung einbinden, um automatisch Größenlimits für Pull-Requests durchzusetzen. Wenn der Bundlesize-Test fehlschlägt, wird die Pull-Anfrage nicht zusammengeführt. Sie funktioniert für Pull-Anfragen auf GitHub mit Travis CI, CircleCI, Wercker und Drone.

Status der Paketgrößenprüfung auf GitHub
Status der Überprüfung der Bundle-Größe auf GitHub

Ihre App ist heute vielleicht schnell, aber das kann sich durch das Hinzufügen von neuem Code oft ändern. Wenn Sie Pull-Requests anhand der Bundle-Größe prüfen, können Sie Leistungseinbrüche vermeiden. Bootstrap, Tinder, Trivago und viele andere nutzen es, um ihr Budget im Auge zu behalten.

Mit „bundlesize“ können Sie für jede Datei separate Grenzwerte festlegen. Dies ist besonders nützlich, wenn Sie ein Bundle in Ihrer Anwendung aufteilen.

Standardmäßig werden die Größen der komprimierten Assets getestet. Mit der Komprimierungsoption können Sie zur Brotli-Komprimierung wechseln oder sie vollständig deaktivieren.

Lighthouse-Bot

Lighthouse-Bot

Der Lighthouse-Bot lässt sich in Travis CI einbinden und erzwingt Budgets basierend auf einer der fünf Lighthouse-Audit-Kategorien. Beispiel: Ein Budget von 100 für Ihre Lighthouse-Leistungsbewertung. Manchmal ist es einfacher, eine einzelne Zahl im Blick zu behalten, als einzelne Asset-Budgets. Lighthouse-Bewertungen berücksichtigen viele Faktoren.

Lighthouse-Bewertungen 💯
Lighthouse-Bewertungen 💯

Lighthouse Bot führt eine Prüfung durch, nachdem Sie eine Website auf dem Staging-Server bereitgestellt haben. Legen Sie unter .travis.yml mit den Optionen --perf, --a11y, --bp, --seo oder --pwa Budgets für bestimmte Lighthouse-Kategorien fest. Versuche, mit einem Wert von mindestens 90 in der grünen Zone zu bleiben.

after_success:
  - ./deploy.sh # Deploy the PR changes to staging server
  - npm run lh -- --perf=96 https://staging.example.com # Run Lighthouse test

Wenn die Bewertungen für eine Pull-Anfrage auf GitHub unter den von Ihnen festgelegten Grenzwert fallen, kann der Lighthouse-Bot verhindern, dass die Pull-Anfrage zusammengeführt wird. ⛔

Lighthouse-Bot-Prüfstatus auf GitHub
Lighthouse-Bot-Prüfstatus auf GitHub

Der Lighthouse-Bot kommentiert dann Ihre Pull-Anfrage mit aktualisierten Bewertungen. Das ist eine praktische Funktion, die bei Codeänderungen zu Gesprächen über die Leistung anregt.

Lighthouse-Bewertungen in Pull-Anfragen
Lighthouse-Bewertungen in Pull-Anfragen 💬

Wenn Ihr Pull-Request aufgrund eines schlechten Lighthouse-Werts blockiert wurde, führen Sie eine Prüfung mit der Lighthouse-Befehlszeile oder in den Dev-Tools durch. Es wird ein Bericht mit Details zu Engpässen und Hinweisen für einfache Optimierungen erstellt.

Zusammenfassung

Tool Befehlszeile CI Zusammenfassung
Leuchtturm ✔️
  • Budgets für verschiedene Arten von Ressourcen basierend auf ihrer Größe oder Anzahl
Webpack ✔️
  • Budgets basierend auf der Größe von Assets, die von webpack generiert wurden.
  • Prüft die unkomprimierte Größe.
bundlesize ✔️ ✔️
  • Budgets, die auf der Größe bestimmter Ressourcen basieren.
  • Prüft komprimierte oder unkomprimierte Größen.
Lighthouse-Bot ✔️
  • Budgets auf Basis von Lighthouse-Bewertungen.