STATUS IS UPWIKI WEBSITE-OPTIMALISATIE
25Versnellen
Prestaties en levering / Versnellen

JavaScript-prestaties: Verminder werk op de main-thread

Vind JavaScript dat een pagina doet haperen of vertragen, verwijder onnodig werk en bescherm interacties.

JavaScript-prestaties: Verminder werk op de main-thread — VISUELE GIDS
LEZEN
8 minuten
BRONNEN
5
HERVALIDEREN
2027-03-27
beoordeeld
Senior beoordelaar van webprestaties
HET KORTE ANTWOORD

Begin met de beslissing.

Verminder main-thread-werk door een echte pagina en interactie te meten en daarna de grootste herhaalbare kosten te verhelpen. De main-thread voert de meeste pagina-JavaScript en interfacewerk één taak tegelijk uit. Een taak langer dan 50 milliseconden is een long task, waardoor een tik, klik, scroll of paint achter die taak kan wachten. Begin bij checkout, zoeken, navigatie, formulieren en andere gevoelige trajecten.

Voor elke kostenpost: verwijder het, stel het uit tot het nodig is, verdeel het in korte batches of verplaats afgebakende berekeningen naar een Web Worker. Houd de onmiddellijke respons op de main-thread, maar stel analytics en andere niet-essentiële opvolgtaken uit. Behandel elk third-party tag als een productieafhankelijkheid met een eigenaar. Test opnieuw op een beperkt mobiele CPU en zorg voor rollback-opties voor kritieke paden.

VISUELE GIDS

Zie het werk als een systeem.

Gebruik deze kaart om de beslissingen uit het artikel te verbinden voordat je individuele tactieken toepast.

SIUVersnellen
01Meet een klanttraject voordat u code wijzigt
02Lees de trace als een wachtrij van werk
03Lever minder code op het moment dat het ertoe doet
04Verdeel werk zodat de browser kan reageren
01

Meet een klanttraject voordat u code wijzigt

Kies één belangrijk pad en interactie, zoals het openen van navigatie, filteren van resultaten of het indienen van een formulier. Neem dit op in het Performance-paneel van Chrome DevTools in een schone browsertoestand. Herhaal de actie en leg zowel een run met CPU-throttling als een run op een ontwikkelmachine vast; desktoptraces kunnen werk verbergen dat op een minder krachtige telefoon storend is.

Gebruik de trace om een smalle hypothese te testen, niet om een component de schuld te geven op basis van een bundelrapport. In de Main flame chart nemen bredere balken meer tijd in beslag en gestapelde balken tonen de call stack. Een rood driehoekje op een Task identificeert een potentiële long task; selecteer het en volg de link naar de initierende code. Sla before-and-after traces op voor betekenisvolle veranderingen.

Vang het juiste moment

Neem op net voor de actie en stop na het zichtbare resultaat.

Gebruik een herhaalbaar geval

Houd route, accountstatus en actiesequentie consistent.

Wijs een eigenaar toe

Ken elke grootste kostenpost toe aan het team of de leverancier die deze kan veranderen.

02

Lees de trace als een wachtrij van werk

Een long task is een drempel voor onderzoek, geen volledige diagnose. De W3C Long Tasks-specificatie rapporteert taken van 50 milliseconden of langer. Kijk onder een taak voor JavaScript-evaluatie, een event handler, stijlherberekening, layout of paint. De call stack geeft aan waar te beginnen; timing toont of het probleem code, rendering of een third-party frame is.

Prioriteer kosten die terugkeren tijdens een waardevolle interactie. Een korte handler kan nog steeds traag aanvoelen als deze layout triggert of achter eerder werk wacht. De trace is een labmeting, bevestig de oplossing op representatieve apparaten en, waar beschikbaar, met privacybewuste veldtelemetrie.

Scheid momenten

Startup-parsing vereist een andere remedie dan een post-tap handler.

Inspecteer rendering

Vind herhaalde stijl-write en layout-read patronen vóór refactoring.

Behoud een baseline

Voeg de trace, scenario en topkosten toe aan het werkitem.

03

Lever minder code op het moment dat het ertoe doet

Maak een inventaris van scripts per route en doel. Verwijder ongebruikte packages, duplicaten, gepensioneerde experimenten en code voor afgesloten features. Split vervolgens route-specifieke of zelden gebruikte features zodat ze laden wanneer ze nodig zijn in plaats van in het initiële pad. Dynamisch laden kan startup-werk verminderen, maar kan zichtbare vertraging creëren wanneer een gebruiker de feature direct nodig heeft.

Vraag je af of een component een volledig client-side framework nodig heeft, of een utility bestaande mogelijkheden dupliceert en of statische HTML plus een kleine uitbreiding volstaat. Test de fallbacktoestand van een uitgestelde module. De pagina moet optionele functionaliteit probleemloos kunnen uitstellen in plaats van een niet-werkend bedieningselement te tonen.

Stel een routebudget op

Documenteer welke scripts op een route zijn toegestaan en waarom.

Laad op intentie

Overweeg dit voor optionele editors, kaarten, spelers of rapportageweergaven.

Bescherm kritieke paden

Test authenticatie, toegankelijkheid, betalingen en formulierafhandeling; zoek gekwalificeerde review waar bedieningselementen beïnvloed worden.

04

Verdeel werk zodat de browser kan reageren

Het opdelen van code in kleinere functies creëert geen aparte browsertaken als die functies synchroon worden uitgevoerd. Deel bij een lange lus het werk op in batches, werk de direct zichtbare gebruikersstatus bij en geef daarna de CPU vrij voordat je doorgaat. Zo kan de browser tussen batches invoer en rendering verwerken.

Waar ondersteund, geeft `scheduler.yield()` de main thread vrij en gaat het werk later verder; controleer met feature detection of de functie beschikbaar is en gebruik een fallback voor niet-ondersteunde browsers. Geef de uitvoering niet na elke piepkleine bewerking vrij: dat heeft overhead en kan de voltooiingstijd verhogen. Kies grenzen op basis van metingen, behoud de mogelijkheid tot annuleren en voorkom dat verouderde resultaten nieuwere status overschrijven.

Zet UI eerst

Toon acceptatie of voortgang vóór niet-zichtbare opvolgacties.

Batch op verstreken tijd

Yield voordat gemeten werk lang wordt, in plaats van eenmaal per item.

Vermijd achterhaalde shortcuts

De huidige web.dev-richtlijn raadt geen nieuwe strategie gebaseerd op `isInputPending()` aan.

05

Verplaats berekening, niet de interface, naar een worker

Een Web Worker voert een script uit op een achtergrondthread, apart van de main thread waarop de pagina wordt uitgevoerd. Hij is geschikt voor kostbaar parsen, datatransformatie, zoekindexering en andere berekeningen die geen directe toegang tot de gebruikersinterface nodig hebben. Stuur een duidelijk afgebakende invoer, ontvang een duidelijk afgebakend resultaat en houd rendering en zichtbare statuswijzigingen op de main thread.

Workers zijn niet universeel. Ze kunnen de DOM niet rechtstreeks manipuleren of Window gebruiken, en bij de gewone berichtuitwisseling worden gegevens gekopieerd. Het opstarten van een worker, gegevensoverdracht en foutcoördinatie kunnen zwaarder wegen dan een kleine berekening. Meet de volledige interactie, beëindig overbodige workers en ontwerp een fallback als werk in een worker mislukt.

Kies geïsoleerd werk

Begin met een berekening waarvan input en output serialiseerbaar en testbaar zijn.

Versieer berichten

Verwerp resultaten die voor een oudere filter, route of actie zijn gemaakt.

Behoud toegankelijkheid

Communiceer zinvolle voortgang via de normale interface.

06

Beheer JavaScript van derden als productieafhankelijkheid

Analytics, advertising, experimenten, social embeds, videospelers en support-widgets kunnen requests, JavaScript-evaluatie, iframes en afhankelijkheden toevoegen. Een vendor-script kan noodzakelijk zijn, maar valt buiten de directe controle van het applicatieteam en kan prestatie, privacy, beveiliging en continuïteit beïnvloeden. Breng doel, routes, laadconditie, goedkeurder, consentvereiste en verwijder-eigenaar in kaart.

Waar voorwaarden en contracten het toelaten, vergelijk een representatieve pagina met en zonder één third-party origin. Prestatietools kunnen kostbare evaluatie, payloads en long-task-attributie blootleggen. Houd een lichte of vertraagde integratie alleen wanneer de gedocumenteerde waarde de gemeten kosten rechtvaardigt. Bevestig kerncontent en de primaire transactie wanneer een optionele afhankelijkheid traag of afwezig is.

Beperk blast radius

Laad een tag alleen op routes en onder condities die het nodig hebben.

Beoordeel wijzigingsbeheer

Neem tag-manager-wijzigingen op in performance-, privacy-, security- en rollback-review.

Houd een verwijderingsschakel

Documenteer en test hoe een niet-kritische integratie uit te schakelen is.

07

Maak responsiviteit tot een waarborg voor releases

Maak van de winnende trace een kleine regressiecheck voor het belangrijke traject. Definieer gedekte interacties, apparaat- of CPU-beperking, verwachte respons en reviewer. Koppel dit aan bundle- en third-party-inventarisreview zodat een nieuw package of tag niet stilletjes main-thread-werk kan herintroduceren.

Status Is UP gebruikt dit bewijs voor proactieve optimalisatie en veilige remediatie, niet ter vervanging van live beschikbaarheidsmonitoring. Bereid vóór een risicovolle wijziging rollback voor en verifieer het kritieke pad na release. Resultaten variëren per apparaat, netwerk, browser, content en accountstatus; beschouw drempels als regels, niet als garanties.

Bewaak belangrijke wijzigingen

Eis before-and-after traces voor gedeelde navigatie, checkout, zoekopdrachten of grote bundles.

Oefen rollback

Ken de feature-flag, tag-instelling of deployment-versie die bekend-goed gedrag herstelt.

Herzie regelmatig

Profiel opnieuw na grote releases, vendor-wijzigingen of verschuivingen in device-mix.

ACTIE / VERIFIËREN

Je praktische takenlijst.

  1. 01

    Selecteer een kritieke interactie

    Naam route, actie, verwachte respons en klantimpact.

    VERIFIËREN: Een testnotitie registreert route, accountstatus, actie, browser en apparaat- of CPU-instelling.
  2. 02

    Neem een baseline op

    Neem de interactie op in DevTools Performance vanuit een schone staat.

    VERIFIËREN: Het team kan een trace opnieuw bekijken met de Main flame chart.
  3. 03

    Vind blokkerend werk

    Inspecteer long tasks, call stacks, rendering en third-party-activiteit.

    VERIFIËREN: Elke topkostenpost heeft een duur, bron of origin, route en eigenaar.
  4. 04

    Verwijder onnodige scripts

    Verwijder ongebruikte packages, gepensioneerde experimenten, duplicaten en onnodige routecode.

    VERIFIËREN: De build en het kritieke traject werken na verwijdering.
  5. 05

    Stel optionele features uit

    Laad optionele functionaliteit pas wanneer die nodig is, mits de uitgestelde toestand bruikbaar blijft.

    VERIFIËREN: Een fresh-page-test omvat laden, falen of fallback.
  6. 06

    Splits lange taken

    Batch werk en yield na de onmiddellijke interface-respons.

    VERIFIËREN: Een nieuwe trace toont geen vergelijkbare lange taak meer in het interactiepad en bevestigt dat de resultaten correct blijven.
  7. 07

    Beoordeel een worker

    Verplaats alleen afgebakende berekening met gedefinieerde berichten.

    VERIFIËREN: Test end-to-end timing, fouten, verouderde resultaten en cleanup.
  8. 08

    Controleer externe partijen

    Registreer doel, eigenaar, conditie, consent, kosten en uitschakelprocedure.

    VERIFIËREN: Voor elke tag op een kritiek pad is vastgelegd of deze blijft, wordt beperkt, wordt uitgesteld of wordt verwijderd.
  9. 09

    Test beperkte condities

    Herhaal op een throttled CPU en representatieve browsers of apparaten waar haalbaar.

    VERIFIËREN: De vergelijking gebruikt hetzelfde scenario en noteert materiële verschillen.
  10. 10

    Release met rollback

    Voeg trace, acceptatiecheck en reversie-instructie toe aan de release.

    VERIFIËREN: Een aangewezen eigenaar kan bekend-goed gedrag herstellen zonder ongedocumenteerd zoeken.
DISCUSSIEONDERWERPEN

Vergelijk de afwegingen, niet privégegevens.

Gebruik deze vragen met je team of de community van website-eigenaren. Deel methoden en lessen, maar plak nooit inloggegevens, klantgegevens of niet-openbare infrastructuurdetails.

  1. 01

    Welke interactie zag er acceptabel uit in een laadrapport maar bleek traag toen je een echte tik of klik profilde?

  2. 02

    Hoe besluit je of een third-party feature zijn gemeten main-thread-kosten rechtvaardigt?

  3. 03

    Welk rollback-mechanisme maakt het het makkelijkst om een prestatiedegressie terug te draaien zonder een kritisch traject te verstoren?

POPULAIRE / AUTORITATIEVE BRONNEN

Open het bronmateriaal.

web.devOptimize long tasks ↗

Legt long tasks, yielding, `scheduler.yield()`, fallbacks en yield-overhead uit.

Beoordeeld 2026-09-27
Chrome for DevelopersAnalyze runtime performance ↗

Toont opnemen, flame-chart-analyse, long-task-identificatie en brononderzoek.

Beoordeeld 2026-09-27
MDN Web DocsWeb Workers API ↗

Definieert workers, berichtcommunicatie en de directe DOM-beperking.

Beoordeeld 2026-09-27
web.devLoad Third-Party JavaScript ↗

Biedt third-party script-audit en meetrichtlijnen.

Beoordeeld 2026-09-27
W3CLong Tasks API ↗

Definieert long tasks, de drempel en attributie.

Beoordeeld 2026-09-27

Bronbeleid. Dit artikel gebruikt officiële browser-, standaarden- en web-platformdocumentatie gelezen door de redactie. Het onderscheidt meting van garanties en laat niet-onderbouwde beweringen weg.

SNELLE TOELICHTINGEN

Veelgestelde vragen.

Wat telt als een lange JavaScript-taak?

De W3C Long Tasks-specificatie gebruikt 50 milliseconden of meer als rapportagedrempel. Het is een signaal om te onderzoeken, geen bewijs dat kortere taken onschadelijk zijn. Bevestig de oorzaak in een trace.

Zal code-splitting altijd JavaScript-prestaties verbeteren?

Nee. Splitsen kan startup-werk verminderen maar eerste-gebruik vertragen. Gebruik het voor route-specifieke of optionele code en test die feature onder beperkte condities.

Moet elke dure functie in een Web Worker draaien?

Nee. Workers zijn geschikt voor geïsoleerde, CPU-intensieve berekeningen met gedefinieerde berichten. Ze kunnen de DOM niet rechtstreeks wijzigen, gegevensoverdracht kost tijd en kleine taken zijn soms sneller klaar op de main thread.

Status Is UP Editorial Team · Uptime Enablement-redactie

Beoordeeld door Senior beoordelaar van webprestaties. Gepubliceerd 2026-09-27; bijgewerkt 2026-09-30.