STATUS IS UPWEBSITE‑OPTIMIERUNGS‑WIKI
25Beschleunigen
Performance und Auslieferung / Beschleunigen

JavaScript-Performance: Haupt-Thread-Arbeit reduzieren

Finden Sie JavaScript, das eine Seite stocken lässt oder Interaktionen verzögert, entfernen Sie unnötige Arbeit und schützen Sie so Interaktionen.

JavaScript-Performance: Haupt-Thread-Arbeit reduzieren — VISUELLE ANLEITUNG
LESEN
8 Minuten
QUELLEN
5
ERNEUT PRÜFEN
2027-03-27
geprüft
Senior-Reviewer für Web-Performance
DIE KURZE ANTWORT

Mit der Entscheidung beginnen.

Reduzieren Sie die Arbeit auf dem Hauptthread, indem Sie eine reale Seite und eine reale Interaktion messen und dann die größte wiederkehrende Kostenstelle beheben. Der Hauptthread führt den Großteil der JavaScript- und UI-Arbeit einer Seite sequenziell aus. Eine Aufgabe, die länger als 50 Millisekunden dauert, ist eine Long Task; daher können Tippen, Klicken, Scrollen oder ein Paint darauf warten. Beginnen Sie mit Checkout, Suche, Navigation, Formularen und anderen sensiblen Pfaden.

Für jede Kostenstelle: Entfernen Sie sie, verschieben Sie sie bis zur tatsächlichen Nutzung, teilen Sie sie in kurze Batches auf oder verlagern Sie klar abgegrenzte Berechnungen in einen Web Worker. Belassen Sie die unmittelbare Rückmeldung im Hauptthread, verschieben Sie jedoch Analytics und andere nicht essenzielle Nacharbeiten. Behandeln Sie jedes Drittanbieter-Tag als Produktionsabhängigkeit mit einer zuständigen Person. Testen Sie erneut mit einer gedrosselten mobilen CPU und behalten Sie für kritische Abläufe eine Rollback-Möglichkeit.

VISUELLE ANLEITUNG

Verstehen Sie die Arbeit als zusammenhängendes System.

Nutzen Sie diese Karte, um die Entscheidungen des Artikels zu verbinden, bevor Sie einzelne Taktiken umsetzen.

SIUBeschleunigen
01Profilisiere eine Kundenreise, bevor du Code änderst
02Lies den Trace als Warteschlange von Arbeit
03Liefer weniger Code zur relevanten Zeit
04Teile Arbeit auf, damit der Browser reagieren kann
01

Profilisiere eine Kundenreise, bevor du Code änderst

Wählen Sie einen wichtigen Pfad und eine Interaktion, z. B. das Öffnen der Navigation, Filtern von Ergebnissen oder Absenden eines Formulars. Zeichnen Sie die Aktion im Performance-Panel der Chrome DevTools bei sauberem Browserzustand auf. Wiederholen Sie die Aktion und erfassen Sie sowohl einen Durchlauf mit gedrosselter CPU als auch einen auf einem Entwicklungsrechner; Desktop-Traces können Arbeit verbergen, die auf einem weniger leistungsfähigen Smartphone stört.

Verwende den Trace, um eine enge Hypothese zu testen, nicht um eine Komponente allein aus einem Bundle-Bericht zu beschuldigen. Im Main-Flame-Chart zeigen breitere Balken längere Zeiten und gestapelte Balken den Call-Stack. Ein rotes Dreieck auf einer Task identifiziert eine potenzielle Long Task; wähle sie aus und folge dem Link zum initialisierenden Code. Speichere Vorher-/Nachher-Traces für aussagekräftige Änderungen.

Erfasse den Moment

Nimm kurz vor der Aktion auf und stoppe nach dem sichtbaren Ergebnis.

Nutze einen reproduzierbaren Fall

Halte Route, Account-Zustand und Aktionssequenz konsistent.

Benenne einen Owner

Ordnen Sie jede wesentliche Kostenstelle einer zuständigen Person im Team oder beim Anbieter zu.

02

Lies den Trace als Warteschlange von Arbeit

Eine Long Task ist ein Schwellenwert für die Untersuchung, aber keine vollständige Diagnose. Die W3C-Spezifikation Long Tasks erfasst Aufgaben, die 50 Millisekunden oder länger dauern. Untersuchen Sie innerhalb einer Aufgabe JavaScript-Auswertung, einen Event-Handler, Stilneuberechnung, Layout oder Paint. Der Call-Stack zeigt, wo Sie beginnen sollten; die Zeitmessung zeigt, ob das Problem im Code, beim Rendering oder in einem Drittanbieter-Frame liegt.

Priorisiere Kosten, die während einer wertvollen Interaktion wiederkehren. Ein kurzer Handler kann sich immer noch langsam anfühlen, wenn er Layout auslöst oder hinter früherer Arbeit wartet. Der Trace ist eine Labor-Messung, also bestätige die Behebung auf repräsentativen Geräten und, wo verfügbar, mit datenschutzbewusster Feldtelemetrie.

Trenne Momente

Das Parsen beim Start erfordert eine andere Maßnahme als ein Handler nach einem Tap.

Untersuche Rendering

Suchen Sie vor einer Refaktorisierung nach wiederholten Mustern, bei denen Stile geändert und anschließend Layoutdaten gelesen werden.

Bewahre eine Baseline

Hänge Trace, Szenario und Top-Kosten an das Arbeitspaket.

03

Liefer weniger Code zur relevanten Zeit

Erstelle ein Inventar der Skripte nach Route und Zweck. Entferne ungenutzte Pakete, Duplikate, eingestellte Experimente und Code für beendete Features. Teile anschließend routespezifische oder selten genutzte Features so auf, dass sie bei Bedarf geladen werden und nicht im Initialpfad. Dynamisches Laden kann Startup-Arbeit reduzieren, kann aber eine sichtbare Verzögerung erzeugen, wenn ein Nutzer die Funktion sofort braucht.

Frage dich, ob eine Komponente ein komplettes Client-Framework benötigt, ob ein Utility vorhandene Fähigkeiten dupliziert und ob statisches HTML plus eine kleine Verbesserung ausreicht. Teste den Fallback-Zustand eines verzögert geladenen Moduls. Die Seite sollte eine optionale Fähigkeit elegant verschieben statt ein totes Bedienelement anzuzeigen.

Erstelle ein Routen-Budget

Dokumentiere, welche Skripte auf einer Route erlaubt sind und warum.

Bei Nutzungsabsicht laden

Denk daran für optionale Editoren, Karten, Player oder Reporting-Views.

Schütze kritische Pfade

Testen Sie Authentifizierung, Barrierefreiheit, Zahlungen und Formularabschlüsse; lassen Sie betroffene Kontrollen qualifiziert prüfen.

04

Teile Arbeit auf, damit der Browser reagieren kann

Das Benennen kleinerer Funktionen erzeugt keine separaten Browser-Tasks, wenn sie synchron laufen. Bei einer langen Schleife: verarbeite in Batches, aktualisiere sofort sichtbaren UI-Zustand und gib dann Kontrolle zurück, bevor du fortfährst. So kann der Browser zwischen den Batches Eingaben und Rendering verarbeiten.

Wenn unterstützt, räumt scheduler.yield() dem Hauptthread Zeit ein und setzt die Arbeit später fort; prüfen Sie, ob die Funktion verfügbar ist, und verwenden Sie für nicht unterstützte Browser einen Fallback. Geben Sie die Kontrolle nicht nach jeder winzigen Operation ab: Das verursacht Overhead und kann die Gesamtausführungszeit erhöhen. Legen Sie die Grenzen anhand von Messungen fest, erhalten Sie Abbruchmöglichkeiten und verhindern Sie, dass veraltete Ergebnisse neuere Zustände überschreiben.

UI zuerst

Zeige Bestätigung oder Fortschritt vor nicht sichtbarer Nacharbeit.

Batch nach verstrichener Zeit

Gebe zurück, bevor gemessene Arbeit lang wird, statt einmal pro Item.

Vermeiden Sie überholte Kurzlösungen

Die aktuelle web.dev-Empfehlung rät nicht zu einer neuen Strategie, die auf isInputPending() basiert.

05

Verschiebe Berechnung, nicht die Oberfläche, in einen Worker

Ein Web Worker führt ein Script in einem Hintergrund-Thread aus, getrennt vom Hauptausführungs-Thread. Er eignet sich für kostspieliges Parsen, Datenumwandlung, Suchindexierung und andere Berechnungen, die keinen direkten Interface-Zugriff benötigen. Sende definierte Eingaben, gib ein definiertes Ergebnis zurück und behalte Rendering und sichtbare Zustandsänderungen im Haupt-Thread.

Worker sind nicht universell einsetzbar. Sie können das DOM nicht direkt manipulieren oder Window verwenden, und generelle Nachrichtenkommunikation kopiert Daten. Erstellung von Workern, Datenbewegung und Fehlerkoordination können kleinen Berechnungen mehr Aufwand hinzufügen als Einsparung. Messe die komplette Interaktion, beende unnötige Worker und entwerfe einen Fallback, falls Worker-Arbeit fehlschlägt.

Wähle isolierte Arbeit

Beginne mit einer Berechnung, deren Eingabe und Ausgabe serialisierbar und testbar sind.

Versioniere Nachrichten

Verwerfen Sie Ergebnisse, die für einen früheren Filter, eine frühere Route oder eine frühere Aktion erstellt wurden.

Erhalte Barrierefreiheit

Kommuniziere sinnvollen Fortschritt über die normale Oberfläche.

06

Behandle Drittanbieter-JavaScript als Produktionsabhängigkeit

Analytics, Werbung, Experimente, Social-Embeds, Videoplayer und Support-Widgets können Anfragen, JavaScript-Auswertung, Iframes und Abhängigkeiten hinzufügen. Ein Anbieterskript kann notwendig sein, liegt jedoch außerhalb der direkten Kontrolle des Anwendungsteams und kann Performance, Datenschutz, Sicherheit und Kontinuität beeinträchtigen. Erstellen Sie ein Inventar mit Zweck, Routen, Ladebedingungen, Genehmiger, Einwilligungsanforderung und einer verantwortlichen Person für die Entfernung.

Soweit Bedingungen und Verträge es erlauben, vergleiche eine repräsentative Seite mit und ohne eine Drittanbieter-Origin. Performance-Tools können kostspielige Evaluation, Payloads und Long-Task-Attribution offenlegen. Behalte nur eine leichte oder verzögerte Integration, wenn ihr dokumentierter Wert die gemessenen Kosten rechtfertigt. Bestätige Kerninhalte und die primäre Transaktion, wenn eine optionale Abhängigkeit langsam oder nicht vorhanden ist.

Auswirkungsbereich begrenzen

Lade ein Tag nur auf Routen und unter Bedingungen, die es benötigen.

Prüfe Change Control

Beziehen Sie Änderungen im Tag-Manager in die Prüfungen zu Performance, Datenschutz, Sicherheit und Rollback ein.

Deaktivierungsmöglichkeit bereithalten

Dokumentiere und teste, wie eine nicht-kritische Integration deaktiviert wird.

07

Mache Reaktionsfähigkeit zur Release-Sicherheitsmaßnahme

Verwandle den erfolgreichsten Trace in eine kleine Regressionsprüfung für die wichtige Reise. Definiere abgedeckte Interaktionen, Geräte- oder CPU-Einschränkung, erwartete Reaktion und Reviewer. Koppel das mit Bundle- und Drittanbieter-Inventar-Review, sodass ein neues Paket oder Tag nicht stillschweigend Haupt-Thread-Arbeit wieder einführt.

Status Is UP verwendet diese Evidenz für proaktive Optimierung und sichere Behebung, nicht als Ersatz für die Live-Überwachung der Verfügbarkeit. Bereiten Sie vor einer risikoreichen Änderung ein Rollback vor und verifizieren Sie den kritischen Ablauf nach dem Release. Ergebnisse variieren je nach Gerät, Netzwerk, Browser, Inhalt und Account-Zustand; behandeln Sie Schwellenwerte als Leitplanken, nicht als Garantien.

Wesentliche Änderungen absichern

Fordere Vorher-/Nachher-Traces für gemeinsame Navigation, Checkout, Suche oder große Bundles.

Übe Rollback

Kennen Sie das Feature-Flag, die Tag-Einstellung oder die Deployment-Version, mit der sich bekanntermaßen funktionierendes Verhalten wiederherstellen lässt.

Regelmäßig nachmessen

Profilisiere nach größeren Releases, Vendor-Änderungen oder Verschiebungen in der Geräte-Mischung erneut.

AKTION / ÜBERPRÜFEN

Ihr praktischer To‑Do‑Leitfaden.

  1. 01

    Wähle eine kritische Interaktion

    Benenne Route, Aktion, erwartete Reaktion und Kundenimpact.

    ÜBERPRÜFEN: Eine Testnotiz dokumentiert Route, Account-Zustand, Aktion, Browser und Gerät- oder CPU-Einstellung.
  2. 02

    Nimm eine Baseline auf

    Nimm die Interaktion im DevTools Performance-Panel aus einem sauberen Zustand auf.

    ÜBERPRÜFEN: Das Team kann einen Trace mit dem Main-Flame-Chart erneut aufrufen.
  3. 03

    Finde blockierende Arbeit

    Untersuche Long Tasks, Call Stacks, Rendering und Drittanbieter-Aktivität.

    ÜBERPRÜFEN: Jede Top-Kostenstelle hat Dauer, Quelle oder Origin, Route und Owner.
  4. 04

    Entferne unnötige Skripte

    Lösche ungenutzte Pakete, eingestellte Experimente, Duplikate und nicht benötigten Routen-Code.

    ÜBERPRÜFEN: Der Build und die kritische Reise funktionieren nach der Entfernung.
  5. 05

    Verzögere optionale Funktionen

    Lade optionale Fähigkeiten später nur, wenn ihr verzögerter Zustand noch nutzbar bleibt.

    ÜBERPRÜFEN: Ein Frischseiten-Test deckt Laden, Fehler oder Fallback ab.
  6. 06

    Teile lange Tasks

    Batche Arbeit und gib nach der unmittelbaren Interface-Antwort zurück.

    ÜBERPRÜFEN: Ein neuer Trace entfernt die vergleichbare Long Task im Interaktionspfad und erhält korrekte Ergebnisse.
  7. 07

    Bewerte einen Worker

    Verschiebe nur begrenzte Berechnung mit definierten Nachrichten.

    ÜBERPRÜFEN: Teste End-to-End-Timings, Fehler, veraltete Ergebnisse und Aufräumen.
  8. 08

    Auditiere Drittanbieter

    Dokumentiere Zweck, Owner, Bedingung, Consent, Kosten und Deaktivierungs-Prozedur.

    ÜBERPRÜFEN: Für jedes Tag auf einer kritischen Route liegt eine Entscheidung zum Beibehalten, Einschränken, Verzögern oder Entfernen vor.
  9. 09

    Teste eingeschränkte Bedingungen

    Wiederholen Sie die Prüfung mit gedrosselter CPU und auf repräsentativen Browsern oder Geräten, sofern möglich.

    ÜBERPRÜFEN: Der Vergleich verwendet dasselbe Szenario und dokumentiert signifikante Unterschiede.
  10. 10

    Release mit Rollback

    Hänge Trace, Akzeptanzprüfung und Rücksetz-Anweisung an das Release.

    ÜBERPRÜFEN: Ein benannter Owner kann bekannt-gutes Verhalten ohne unklare Suche wiederherstellen.
DISKUSSIONSTHEMEN

Vergleichen Sie Kompromisse, nicht private Daten.

Nutzen Sie diese Fragen mit Ihrem Team oder der Website‑Betreiber‑Community. Teilen Sie Methoden und Erkenntnisse, aber fügen Sie niemals Zugangsdaten, Kundendaten oder nicht‑öffentliche Infrastrukturdaten ein.

  1. 01

    Welche Interaktion sah in einem Ladebericht akzeptabel aus, erwies sich aber beim Profiling eines echten Taps oder Klicks als langsam?

  2. 02

    Wie entscheidest du, ob ein Drittanbieter-Feature seine gemessenen Haupt-Thread-Kosten rechtfertigt?

  3. 03

    Welcher Rollback-Mechanismus macht es am einfachsten, eine Performance-Regressions ohne Störung eines kritischen Pfads rückgängig zu machen?

BELIEBTE / MASSGEBLICHE RESSOURCEN

Öffnen Sie das Quellmaterial.

web.devOptimize long tasks ↗

Erklärt Long Tasks, Yielding, scheduler.yield(), Fallbacks und Yield-Overhead.

Geprüft 2026-09-27
Chrome for DevelopersAnalyze runtime performance ↗

Zeigt Aufnahme, Flame-Chart-Analyse, Long-Task-Identifikation und Quelluntersuchung.

Geprüft 2026-09-27
MDN Web DocsWeb Workers API ↗

Definiert Worker, Nachrichtenkommunikation und die direkte DOM-Beschränkung.

Geprüft 2026-09-27
web.devLoad Third-Party JavaScript ↗

Bietet Leitfäden für Audit und Messung von Drittanbieter-Skripten.

Geprüft 2026-09-27
W3CLong Tasks API ↗

Definiert Long Tasks, die Schwelle und Attribution.

Geprüft 2026-09-27

Quellenrichtlinie. Dieser Artikel verwendet offizielle Browser-, Standards- und Webplattform-Dokumentation, die das Redaktionsteam gelesen hat. Er unterscheidet Messung von Garantien und lässt nicht unterstützte Behauptungen weg.

KURZE KLARSTELLUNGEN

Häufige Fragen.

Was zählt als eine lange JavaScript-Task?

Die W3C Long Tasks-Spezifikation verwendet 50 Millisekunden oder mehr als Melde-Schwelle. Es ist ein Signal zur Untersuchung, nicht der Beweis, dass kürzere Tasks harmlos sind. Bestätige die Ursache in einem Trace.

Verbessert Code-Splitting immer die JavaScript-Performance?

Nein. Splitting kann Startup-Arbeit reduzieren, aber eine Verzögerung beim ersten Gebrauch hinzufügen. Verwende es für routespezifischen oder optionalen Code und teste diese Funktion unter eingeschränkten Bedingungen.

Sollte jede teure Funktion in einem Web Worker laufen?

Nein. Worker eignen sich für isolierte, CPU-intensive Berechnungen mit definierten Nachrichten. Sie können das DOM nicht direkt ändern, Datenübertragung kostet Zeit, und kleine Tasks sind auf dem Haupt-Thread möglicherweise schneller fertig.

Status Is UP Editorial Team · Uptime-Enablement-Redakteure

Geprüft von Senior-Reviewer für Web-Performance. Veröffentlicht 2026-09-27; aktualisiert 2026-09-30.