7 Min

Performance‑Budgets, die funktionieren: praktische Limits für schnelle Web‑Apps

Performance‑Budgets halten Web‑Apps schnell, indem sie klare Limits für Ladezeit, JS‑Größe und Core Web Vitals setzen – plus schnelle Audits und Regeln, die zuerst beheben.

Performance‑Budgets, die funktionieren: praktische Limits für schnelle Web‑Apps

Warum Performance Budgets braucht, nicht nur gute Absichten

Ein Performance‑Budget ist eine Reihe von Grenzen, auf die ihr euch vor der Entwicklung einigt. Es kann ein Zeitlimit sein (wie schnell sich die Seite anfühlt), ein Größenlimit (wie viel Code ihr ausliefert) oder eine einfache Obergrenze (Requests, Bilder, Drittanbieter‑Skripte). Wenn ihr das Limit überschreitet, gilt das als gebrochene Anforderung, nicht als „nett, später zu beheben“.

Geschwindigkeit leidet meist, weil Auslieferung additiv ist. Jedes neue Widget fügt JavaScript, CSS, Fonts, Bilder, API‑Aufrufe und mehr Arbeit für den Browser hinzu. Selbst kleine Änderungen summieren sich, bis die App auf Mittelklasse‑Telefonen und langsamen Netzen schwer wirkt — dort sitzen die meisten echten Nutzer.

Meinungen schützen euch hier nicht. Eine Person sagt „fühlt sich auf meinem Laptop schnell an“, eine andere sagt „es ist langsam“, und das Team diskutiert. Ein Budget beendet die Debatte, indem Performance zu einer messbaren Produktbedingung wird, die ihr durchsetzen könnt.

Hier passt Addy Osmanis Denkweise: behandelt Performance wie Design‑Constraints und Sicherheitsregeln. Ihr „versucht“ nicht, sicher zu bleiben oder „hofft“, dass das Layout gut aussieht. Ihr setzt Standards, überprüft kontinuierlich und blockiert Änderungen, die diese brechen.

Budgets lösen mehrere praktische Probleme auf einmal. Sie machen Trade‑offs explizit (eine neue Funktion kostet irgendwo anders), fangen Regressionen früh ab (wenn Fixes noch günstig sind) und geben allen dieselbe Definition von „schnell genug“. Sie reduzieren auch die Panik kurz vor dem Launch.

Ein typisches Szenario: ihr fügt für ein Dashboard eine reichhaltige Chart‑Library hinzu. Sie wird an alle ausgeliefert, vergrößert das Hauptbundle und verschiebt den ersten bedeutsamen Screen nach hinten. Ohne Budget rutscht das durch, weil die Funktion „funktioniert“. Mit Budget muss das Team wählen: Chart lazy‑laden, Library ersetzen oder die Ansicht vereinfachen.

Das ist besonders wichtig, wenn Teams schnell Apps erzeugen und iterieren können, etwa mit chat‑gesteuerten Workflows wie Koder.ai. Schnelles Entwickeln ist super, macht es aber leicht, zusätzliche Abhängigkeiten und UI‑Spielereien unbemerkt auszuliefern. Budgets verhindern, dass schnelle Iteration zu langsamen Produkten führt.

Fangt mit einem einfachen Ziel an: Seite, Gerät und Netzwerk

Performance‑Arbeit scheitert, wenn ihr alles messt und niemand Verantwortung trägt. Wählt eine Seite oder einen Ablauf, der echten Nutzern wichtig ist, und macht ihn zum Anker für eure Budgets.

Ein guter Start ist eine primäre Reise, bei der Geschwindigkeit Konversion oder tägliche Arbeit beeinflusst, z. B. „Home → Signup“, „Dashboard: erster Ladevorgang nach Login“ oder „Checkout und Zahlungsbestätigung“. Wählt etwas Repräsentatives und Häufiges, keinen Randfall.

Wählt ein Ziel, das zu euren Nutzern passt

Eure App läuft nicht auf eurem Laptop. Ein Budget, das auf einer schnellen Maschine ok aussieht, kann sich auf einem Mittelklasse‑Telefon langsam anfühlen.

Legt eine Ziel‑Geräteklasse und ein Netzwerkprofil fest und schreibt es als Satz auf, den alle wiederholen können.

Beispiel: ein Mittelklasse‑Android‑Telefon der letzten 2–3 Jahre, auf 4G unterwegs (nicht Büro‑Wi‑Fi), gemessen bei einem Cold Load und einer Schlüssel‑Navigation, in der Region, in der die meisten Nutzer sitzen.

Es geht nicht darum, den schlimmsten Fall zu wählen, sondern einen häufigen Fall, für den ihr tatsächlich optimieren könnt.

Sperrt ein Basis‑Testsetup

Zahlen zählen nur, wenn sie vergleichbar sind. Wenn ein Lauf „Chrome mit Extensions auf einem MacBook“ ist und der nächste „gedrosseltes Mobilgerät“, ist die Trendlinie nur Rauschen.

Wählt eine Basis‑Umgebung und bleibt für Budget‑Checks dabei: gleiche Browserversion, gleiche Throttling‑Einstellungen, gleicher Testpfad und gleicher Cache‑Zustand (cold oder warm). Bei echten Geräten: dasselbe Modell.

Definiert nun, was „schnell genug“ in Verhalten bedeutet, nicht in perfekten Demos. Zum Beispiel: „Nutzer können Inhalte schnell lesen“ oder „das Dashboard fühlt sich nach Login reaktionsschnell an“. Übersetzt das in ein oder zwei Metriken für diese Reise und setzt Budgets darum herum.

Budget‑Typen: Zeit, Größe, Requests und Laufzeit

Budgets funktionieren am besten, wenn sie sowohl das abdecken, was Nutzer fühlen, als auch das, was Teams kontrollieren können. Ein gutes Set mischt Erfahrungsmetriken (wie fühlt es sich an?) mit Ressourcen‑ und CPU‑Limits (warum wurde es langsam?).

Timing‑Budgets (Nutzererlebnis)

Diese verfolgen, wie die Seite für echte Leute wirkt. Die nützlichsten sind direkt den Core Web Vitals zuzuordnen:

  • LCP (Largest Contentful Paint): wie schnell der Hauptinhalt sichtbar ist.
  • INP (Interaction to Next Paint): wie reaktionsschnell die Seite bei Tippen, Klicken oder Tippen ist.
  • CLS (Cumulative Layout Shift): wie stark das Layout springt.

Timing‑Budgets sind euer Kompass, weil sie Nutzerfrust abbilden. Sie sagen aber nicht immer, was zu fixen ist — deshalb braucht ihr die folgenden Budget‑Typen zusätzlich.

Größen-, Request‑ und Laufzeit‑Budgets (was Langsamkeit verursacht)

Diese lassen sich leichter in Builds und Reviews durchsetzen, weil sie konkret sind.

Gewichts‑Budgets begrenzen z. B. gesamtes JavaScript, CSS, Bild‑Bytes und Font‑Gewicht. Request‑Budgets begrenzen Anzahl Requests und Drittanbieter‑Skripte und reduzieren Netz‑Overhead und Überraschungen durch Tags, Widgets und Tracker. Laufzeit‑Budgets limitieren Long Tasks, Main‑Thread‑Zeit und Hydration‑Dauer (besonders bei React), was oft erklärt, warum eine Seite auf Mittelklasse‑Geräten „schwer“ wirkt.

Ein praktisches React‑Beispiel: Die Bundle‑Größe kann ok aussehen, aber ein neues Karussell verursacht schweres Client‑Rendering. Die Seite lädt, aber das Tippen auf Filter fühlt sich träge an, weil Hydration den Main‑Thread blockiert. Ein Laufzeit‑Budget wie „keine Long Tasks über X ms während Startup“ oder „Hydration beendet innerhalb Y Sekunden auf Mittelklasse‑Geräten“ fängt dieses Problem, auch wenn Gewichts‑Budgets nichts melden.

Die stärkste Vorgehensweise sieht das System als Ganzes: Erfahrungs‑Budgets definieren Erfolg, und Größen‑, Request‑ und Laufzeit‑Budgets halten Releases ehrlich und machen „was hat sich geändert?“ leicht beantwortbar.

Konkrete Starter‑Budgets, die ihr tatsächlich durchsetzen könnt

Setzt nicht zu viele Limits, sonst hört niemand mehr zu. Wählt 3–5 Budgets, die Nutzererlebnis widerspiegeln und die ihr bei jedem PR oder Release messen könnt.

Ein praktisches Starter‑Set (Zahlen später anpassen):

  • LCP: Warnung bei 2,5 s, Fehler bei 3,0 s (mobil, cold load).
  • INP: Warnung bei 200 ms, Fehler bei 300 ms (übliche Interaktionen wie Menü öffnen oder Formular abschicken).
  • CLS: Warnung bei 0,10, Fehler bei 0,15.
  • JavaScript‑Bundle (initiale Route): Warnung bei 170 KB gzip, Fehler bei 220 KB gzip (nur App‑Code).
  • Bilder (erste Ansicht): Warnung bei 800 KB, Fehler bei 1,2 MB (übertragene Bytes für Bilder im ersten Screen).

Zwei Schwellen halten es praktikabel. „Warn“ zeigt Drift, „Fail“ blockiert ein Release oder erfordert explizite Zustimmung. So wird die Grenze real, ohne ständige Feuerwehreinsätze zu erzeugen.

Schreibt das Budget an einen zentralen Ort: welche Seiten/Flows abgedeckt sind, wo gemessen wird (lokaler Audit, CI, Staging‑Build), welches Gerät/Netzwerkprofil ihr nutzt und wie Metriken definiert sind (Field vs Lab, gzip vs raw, Route‑Level vs ganze App).

Schritt für Schritt: Budgets aus eurer aktuellen App ableiten

Make performance a release rule
Move from warnings to real enforcement with a workflow your team can repeat.

Beginnt mit einer wiederholbaren Baseline. Wählt ein oder zwei zentrale Seiten und testet sie immer mit demselben Geräteprofil und Netzwerk. Führt den Test mindestens dreimal aus und nehmt den Median, damit ein Ausrutscher nicht die Richtung vorgibt.

Nutzt ein einfaches Baseline‑Sheet mit einer Nutzer‑Metrik und einer Build‑Metrik. Beispiel: LCP und INP für die Seite sowie gesamte JS‑Größe und Bild‑Bytes für das Build. So werden Budgets greifbar, weil ihr seht, was ausgeliefert wurde, nicht nur, was ein Lab‑Run geschätzt hat.

Setzt Budgets etwas besser als heute, nicht utopische Zahlen. Eine gute Regel ist 5–10 % Verbesserung gegenüber eurer aktuellen Median‑Metrik. Wenn euer LCP heute 3,2 s ist, springt nicht sofort auf 2,0 s. Startet z. B. mit 3,0 s und verschärft, wenn ihr zeigt, dass ihr das halten könnt.

Fügt vor jeder Freigabe einen schnellen Check ein, bevor Nutzer die Version sehen. Haltet ihn so schnell, dass Leute ihn nicht überspringen. Eine einfache Version: ein Single‑Page‑Audit der vereinbarten Seite, Build fehlschlagen lassen, wenn JS oder Bilder das Budget überschreiten, Ergebnisse pro Commit speichern, damit man sieht, wann es sich geändert hat, und immer dasselbe URL‑Pattern testen (keine zufälligen Daten).

Überprüft Verstöße wöchentlich, nicht erst, wenn Beschwerden kommen. Behandelt einen Verstoß wie einen Bug: identifiziert die Änderung, entscheidet, was sofort gefixt wird und was geplant wird. Verschärft langsam, erst nachdem ihr die Grenze über mehrere Releases gehalten habt.

Wenn sich der Produktumfang ändert, aktualisiert Budgets bewusst. Fügt ihr ein neues Analytics‑Tool oder eine schwere Funktion hinzu, schreibt auf, was gewachsen ist (Größe, Requests, Laufzeit), wie ihr es später ausgleicht und wann das Budget wieder eingehalten sein muss.

Schnelle Audits: ein schneller Weg, um Änderungen zu finden

Ein Budget hilft nur, wenn ihr es schnell prüfen könnt. Ziel eines 10‑Minuten‑Audits ist nicht, perfekte Werte zu liefern, sondern zu erkennen, was sich seit dem letzten guten Build geändert hat und was zuerst zu reparieren ist.

Ein 10‑Minuten‑Audit‑Ablauf

Startet mit einer Seite, die reale Nutzung repräsentiert. Führt dann bei jedem Check dieselben schnellen Kontrollen aus:

  • Identifiziert das LCP‑Element (Hero‑Bild, Heading‑Block, Produkt‑Gallery). Wenn sich das LCP‑Element änderte, springen die Ergebnisse.
  • Prüft JavaScript‑Gewicht und die größten Chunks. Sucht nach neuer Dependency, doppelter Library oder einem großen Feature, das an alle ausgeliefert wurde.
  • Scannt Above‑the‑Fold‑Bilder auf häufige Fehler (unkomprimierte Assets, falsche Dimensionen, fehlende responsive Quellen).
  • Prüft Drittanbieter‑Tags (Analytics, Chat, A/B‑Tests). Ein neues Tag kann große Downloads und Long Tasks hinzufügen.
  • Schaut euch Netzwerk und CPU zusammen an: ist es langsam wegen mehr Bytes oder weil die Seite zu viel Arbeit macht?

Wie man die größten Probleme schnell erkennt

Zwei Ansichten geben meist schnelle Antworten: das Netzwerk‑Waterfall und die Main‑Thread‑Timeline.

Im Waterfall sucht ihr nach einer Anfrage, die den kritischen Pfad dominiert: ein riesiges Script, eine blockierende Schrift oder ein Bild, das spät gestartet wird. Wenn die LCP‑Ressource nicht früh angefordert wird, kann die Seite das LCP‑Budget nicht erreichen, egal wie schnell der Server ist.

In der Timeline achtet auf Long Tasks (≥ 50 ms). Ein Cluster von Long Tasks beim Startup deutet oft auf zu viel JavaScript beim ersten Laden hin. Ein riesiges Chunk ist meist ein Routing‑Problem oder ein geteiltes Bundle, das gewachsen ist.

Notizen, die den nächsten Test vergleichbar machen

Schnelle Audits schlagen fehl, wenn jeder Lauf anders ist. Erfasst ein paar Basics, damit Änderungen sichtbar werden: Page‑URL und Build/Version, Testgerät und Netzwerkprofil, Beschreibung des LCP‑Elements, die wichtigsten Zahlen (z. B. LCP, gesamte JS‑Bytes, Request‑Count) und eine kurze Notiz zum größten Übeltäter.

Desktop‑Tests sind für schnellen Feedback und PR‑Checks in Ordnung. Nutzt echte Geräte, wenn ihr nah an der Grenze seid, die Seite ruckelt oder eure Nutzer überwiegend mobil sind. Mobile CPUs machen Long Tasks deutlich sichtbar — dort scheitern viele „auf meinem Laptop sieht’s ok aus“ Releases.

Was zuerst zu beheben ist: einfache Regeln, die Zeit sparen

Stop bundle growth on React apps
Build a dashboard, set initial route caps, and catch dependency creep early.

Wenn ein Budget fehlschlägt, ist das Schlimmste, „alles zu optimieren“. Nutzt eine wiederholbare Triage‑Reihenfolge, sodass jeder Fix klaren Nutzen bringt.

Eine praktische Triage‑Reihenfolge

Beginnt mit dem, was Nutzer am meisten bemerken, und arbeitet euch zu feineren Anpassungen vor:

  • Macht das wichtigste Above‑the‑Fold‑Element schnell. Findet, was als größter Inhalt rendert, und repariert diese Ressource oder den Rendering‑Pfad zuerst. Bilder skalieren und komprimieren, das richtige Format nutzen und späte Fonts vermeiden, die die erste Ansicht blockieren.
  • Schneidet JavaScript vor dem Polieren von CSS. Zu viel JS bremst alles: langsameres Parsen, mehr Main‑Thread‑Arbeit, verzögertes Rendering. Entfernt ungenutzten Code, teilt schwere Routen und bevorzugt server‑rendered oder statische Inhalte für einfache UI.
  • Zähmt Drittanbieter‑Skripte früh. Chat‑Widgets, Analytics, Tag‑Manager und A/B‑Tools können große Downloads und Long Tasks bringen. Wenn etwas für die erste Ansicht nicht nötig ist, verzögert es. Wenn es wenig Wert bietet, entfernt es.
  • Verhindert Layout‑Shifts durch Design. Reserviert Platz für Bilder, Ads und Embeds. Setzt width/height, nutzt stabile Platzhalter und vermeidet Inhalte, die nachgeladen über bestehenden Content springen.
  • Bei träger Interaktion: Long Tasks reduzieren. Wenn INP schlecht ist, sucht nach schwerer client‑seitiger Arbeit: große Renders, teure State‑Updates oder umfangreiche JSON‑Verarbeitung. Zerlegt Arbeit in kleinere Teile, reduziert Re‑Renders und verschiebt nicht‑UI‑Arbeit vom kritischen Pfad.

Ein schnelles Beispiel

Ein Team liefert ein neues Dashboard aus und verfehlt plötzlich das LCP‑Budget. Statt erst Cache‑Header zu tunen, finden sie, dass das LCP‑Element ein vollformatiger Chart ist. Sie skalieren ihn, liefern ein leichteres Format und laden nur das, was früh benötigt wird. Dann merken sie, dass eine große Chart‑Library auf jeder Route geladen wird. Sie laden sie nur auf der Analytics‑Seite und verzögern ein Drittanbieter‑Support‑Widget bis nach der ersten Interaktion. Innerhalb eines Tages liegt das Dashboard wieder im Budget und das nächste Release hat klare Antworten auf „was hat sich geändert“.

Häufige Fehler, die Teams bei Performance‑Budgets machen

Der größte Fehler ist, Budgets wie ein einmaliges Dokument zu behandeln. Budgets funktionieren nur, wenn sie einfach zu prüfen, schwer zu ignorieren und an den Auslieferungsprozess gebunden sind.

Fehler, die Budgets scheitern lassen

Die meisten Teams stolpern über ein paar Fallen:

  • Zu viele Budgets am ersten Tag oder zu strikte Limits, sodass jedes Build scheitert.
  • Messungen mit wechselnden Einstellungen (Gerät, Throttling, Cache, Testseite).
  • Lab‑Scores jagen, während echtes Nutzerleiden übersehen wird.
  • Eine große Dependency schleicht sich unbemerkt ein.
  • Performance als Projekt behandeln statt als Release‑Regel.

Ein typisches Muster: eine „kleine“ Funktion zieht eine neue Library nach sich. Das Bundle wächst, LCP verlangsamt sich um eine Sekunde auf langsameren Netzen, und niemand merkt es, bis Support‑Tickets kommen. Budgets machen diese Änderung bereits in der Review sichtbar.

Wie man sie vermeidet

Startet simpel und haltet Prüfungen konsistent. Wählt 2–4 Budgets, die Nutzererlebnis abbilden, und verschärft sie langsam. Sperrt euer Test‑Setup und dokumentiert es. Falls möglich, trackt mindestens ein Real‑User‑Signal und nutzt Lab‑Tests, um das „Warum“ zu erklären, nicht um Debatten zu gewinnen. Wenn eine Dependency merklich Gewicht hinzufügt, verlangt eine kurze Notiz: was sie kostet, was sie ersetzt und warum sie es wert ist. Und vor allem: hängt den Budget‑Check in den normalen Release‑Pfad.

Wenn Budgets wie ständiger Frust wirken, sind sie meist unrealistisch für den Status quo oder nicht an echte Entscheidungen gebunden. Behebt diese zwei Ursachen zuerst.

Beispiel: Eine langsamer werdende Web‑App in einen budgetierten Release‑Prozess verwandeln

Test changes without regret
Experiment freely, then roll back instantly when a change breaks your budget.

Ein kleines Team lieferte ein React‑Analytics‑Dashboard in einer Woche. Anfangs fühlte es sich schnell an, aber jede Freitag‑Release machte es etwas schwerer. Nach einem Monat sagten Nutzer, der erste Screen „hängt“ und Filter seien träge.

Sie hörten auf, über „schnell genug“ zu streiten, und schrieben Budgets auf, die Nutzerwahrnehmung abbilden:

  • LCP: 2,5 s auf einem Mittelklasse‑Telefon mit 4G
  • INP: unter 200 ms für übliche Aktionen (Menü öffnen, Filter anwenden)
  • JavaScript: 250 KB gzip für die initiale Route, mit klarer Obergrenze pro neues Feature
  • Bilder: keine unkomprimierten Hero‑Bilder, max. Pixelgröße pro Komponente

Der erste Fehler zeigte sich in zwei Bereichen. Das initiale JS‑Bundle kroch, als Charts, Datumsbibliotheken und ein UI‑Kit hinzugefügt wurden. Gleichzeitig wurde das Dashboard‑Header‑Bild durch eine größere Datei ersetzt „nur vorübergehend“, wodurch LCP über die Grenze ging. INP verschlechterte sich, weil Filter viele teure Re‑Renders und Berechnungen auf dem Main‑Thread auslösten.

Sie gingen in einer Reihenfolge vor, die schnelle Erfolge brachte und Wiederholungen verhinderte:

  1. LCP wieder unter die Grenze bringen: Bilder skalieren und komprimieren, explizite Bild‑Dimensionen setzen und blockierende Font‑Ladevorgänge vermeiden.

  2. Initiales JS reduzieren: ungenutzte Libraries entfernen, nicht kritische Routen splitten und Charts lazy‑laden.

  3. INP verbessern: teure Komponenten memoizen, Tippen in Filtern debouncen und schwere Arbeit vom Hot‑Path verlagern.

  4. Einen Budget‑Check in jedes Release einbauen, damit ein Metric‑Bruch das Release stoppt.

Nach zwei Releases fiel LCP von 3,4 s auf 2,3 s und INP verbesserte sich von etwa 350 ms auf unter 180 ms auf demselben Testgerät.

Checkliste und nächste Schritte (inkl. leichtem Koder.ai‑Workflow)

Ein Budget hilft nur, wenn Leute es jedes Mal auf dieselbe Weise befolgen. Haltet es klein, schreibt es auf und macht es zum Teil des Auslieferungsprozesses.

Wählt einige Metriken, die zu eurer App passen, setzt Warn‑ und Fail‑Schwellen und dokumentiert genau, wie ihr testet (Gerät, Browser, Netzwerk, Seite/Flow). Speichert einen Basisbericht vom besten aktuellen Release und kennzeichnet ihn deutlich. Entscheidet, was als legitime Ausnahme gilt und was nicht.

Vor jedem Release: führt denselben Audit durch und vergleicht mit der Baseline. Wenn etwas regressiert, legt es als Bug ab und behandelt es wie einen gebrochenen Checkout‑Schritt, nicht als „später“. Wenn ihr mit einer Ausnahme ausliefert, benennt einen Owner und ein Ablaufdatum (oft 1–2 Sprints). Wenn Ausnahmen immer wieder verlängert werden, braucht das Budget eine echte Diskussion.

Bringt Budgets früher in Planung und Schätzung: „Dieser Screen fügt eine Chart‑Library hinzu, also müssen wir etwas anderes entfernen oder lazy‑loaden.“ Wenn ihr mit Koder.ai (koder.ai) baut, könnt ihr diese Constraints auch zu Beginn in Planning Mode festhalten, dann in kleineren Schritten iterieren und Snapshots/Rollback nutzen, wenn eine Änderung euch über eine Grenze treibt. Es geht nicht um das Tool, sondern um die Gewohnheit: jedes neue Feature muss für sein Gewicht bezahlen oder es wird nicht ausgeliefert.

FAQ

Was ist ein Performance‑Budget, einfach erklärt?

Ein Performance‑Budget sind harte Grenzen (Zeit, Größe, Requests, CPU‑Arbeit), auf die sich dein Team bevor mit der Umsetzung einigt.

Wenn eine Änderung das Limit überschreitet, behandelt ihr das wie eine gebrochene Anforderung: beheben, Umfang reduzieren oder eine Ausnahme mit Eigentümer und Verfallsdatum explizit genehmigen.

Warum brauchen wir Budgets statt einfach „auf Performance zu achten“?

Weil Performance schleichend schlechter wird. Jede neue Funktion fügt JavaScript, CSS, Bilder, Fonts, API‑Aufrufe und Drittanbieter‑Skripte hinzu.

Budgets stoppen dieses schrittweise Wachstum, indem sie einen Handel erzwingen: wenn du Gewicht oder Arbeit hinzufügst, musst du es wieder ausgleichen (lazy‑load, Route splitten, UI vereinfachen, Abhängigkeit entfernen).

Welche Seite oder welcher Flow sollte zuerst budgetiert werden?

Wählt einen echten Nutzer‑Flow und ein konsistentes Test‑Setup.

Gute Starter sind häufige, geschäftskritische Abläufe wie:

  • erster Ladevorgang nach dem Login ins Dashboard
  • Start → Anmeldung
  • Checkout‑Bestätigung

Vermeidet Edge‑Cases; ihr wollt einen Flow, den ihr bei jedem Release messen könnt.

Wie wählen wir Gerät und Netzwerkziel ohne es zu verkomplizieren?

Beginnt mit einem Ziel, das typische Nutzer repräsentiert, z. B.:

  • ein Mittelklasse‑Smartphone
  • 4G (nicht Büro‑Wi‑Fi)
  • Cold load plus eine wichtige Navigation

Schreibt das auf und haltet es stabil. Wenn ihr Gerät, Netzwerk, Cache‑Status oder Testpfad ändert, wird die Trendlinie unbrauchbar.

Welche Metriken eignen sich am besten als Performance‑Budgets?

Wählt eine kleine Menge, die sowohl wie Nutzer es empfinden als auch was Teams kontrollieren können abdeckt:

  • Timing: LCP, INP, CLS
  • Größe: Initiale Route JS gzip (und/oder CSS)
  • Medien: Bytes für Bilder im ersten sichtbaren Bereich

Timing‑Metriken zeigen den Schmerz; Größen‑ und Laufzeitlimits helfen zu finden, was ihn verursacht hat.

Was sind realistische Starter‑Werte für Budgets?

Ein praktischer Starter‑Satz ist:

  • LCP: Warnung bei 2.5s, Fehler bei 3.0s (mobil, cold load)
  • INP: Warnung bei 200ms, Fehler bei 300ms (häufige Interaktionen)
  • CLS: Warnung bei 0.10, Fehler bei 0.15
  • Initiales JS (App‑Code): Warnung 170KB gzip, Fehler 220KB gzip
  • Bilder (erste Ansicht): Warnung 800KB, Fehler 1.2MB

Wählt zuerst 3–5 Budgets. Schärft die Zahlen später auf Basis eurer Baseline und Release‑Historie.

Wozu dienen getrennte „Warn“- und „Fail“-Schwellen?

Verwendet zwei Schwellen:

  • Warnung: signalisiert Drift; Merge möglich, aber untersuchen.
  • Fehler: blockiert Release oder erfordert explizite Genehmigung.

So vermeidet ihr dauernden Alarm, macht die Grenzen aber ernst, wenn sie überschritten werden.

Was tun wir sofort, wenn ein Budget fehlschlägt?

Geht so vor:

  1. Stellt sicher, dass sich das LCP‑Element nicht verändert hat (ein anderer Hero kann Werte stark beeinflussen).
  2. Prüft, was gewachsen ist: JS‑Bytes, Bild‑Bytes, Anzahl Requests, Drittanbieter‑Tags.
  3. Sucht nach Long Tasks (>=50ms) beim Start; die erklären oft, dass die Seite „klebrig“ wirkt.
  4. Behebt den größten Übeltäter zuerst (meistens ein Above‑the‑Fold‑Bild, eine neue Dependency oder verlorenes Code‑Splitting).

Behandelt den Verstoß wie einen Bug: Commit identifizieren, fixen oder Umfang reduzieren und Wiederholungen verhindern.

Warum fühlt sich eine React‑App langsam an, obwohl das Bundle‑Budget eingehalten wird?

Nicht immer. Die Bundle‑Größe kann in Ordnung wirken, während die Seite trotzdem träge ist, weil der Main‑Thread ausgelastet ist.

Typische React‑Ursachen:

  • schwere Hydration
  • teure Re‑Renders bei der ersten Interaktion
  • große Komponenten mit viel Client‑Rendering

Fügt ein Runtime‑Budget hinzu (z. B. Limit für Long Tasks während Startup oder ein Hydration‑Zeitlimit), um diese Ursache zu erfassen.

Wie passen Performance‑Budgets zu Teams, die schnell mit Tools wie Koder.ai bauen?

Schnelles Generieren und Iterieren kann stillschweigend Abhängigkeiten, UI‑Spielereien und Drittanbieter‑Skripte hinzufügen, die für alle ausgerollt werden.

Die Lösung: Budgets in den Workflow integrieren:

  • Budgets schon in der Planung festschreiben (Welche Seite, welche Limits, welches Test‑Setup)
  • Schnelle Prüfungen bei jedem Release oder PR
  • Snapshots/Rollback nutzen, wenn eine Änderung ein Limit sprengt

So bleibt schnelle Entwicklung nicht auf Kosten der Performance.

Related posts