React Academy · Les

Waarom debounce en throttle belangrijk zijn in UI's

Krijg inzicht in de prestatiekosten van niet-beperkte handlers voor keypress, scroll en resize, en wanneer u elke oplossing toepast

Les 1 van 413 stappen

Waarom debounce en throttle belangrijk zijn in UI's is een gratis React Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject React Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus React Academy bevat in totaal 4 lessen.

Gebeurtenissen van gebruikers met hoge frequentie

Sommige DOM-gebeurtenissen worden extreem vaak geactiveerd. De gebeurtenis keypress wordt bij elke toetsaanslag geactiveerd. De gebeurtenis scroll wordt tijdens het scrollen tientallen keren per seconde geactiveerd. De gebeurtenis resize wordt voortdurend geactiveerd terwijl de gebruiker de rand van het venster versleept. Elke gebeurtenis afzonderlijk verwerken kan zowel de browser als je server overbelasten.

De kosten van onbegrensde handlers

Als je keypress-handler bij elke toetsaanslag een API-aanroep doet, veroorzaakt een gebruiker die "React hooks" typt (11 tekens) 11 netwerkverzoeken, waarvan de meeste onvolledige zoekopdrachten bevatten. Zo zorgt het bijwerken van een parallaxanimatie bij elke gescrollde pixel voor honderden React-opnieuwrenderingen per seconde. Dit verspilt processorcapaciteit, netwerkverkeer en batterij.

Wat debouncen doet

Debouncen stelt de uitvoering uit totdat de gebeurtenis gedurende een bepaalde periode niet meer is geactiveerd. Als de gebruiker nog steeds typt, wordt de timer bij elke toetsaanslag opnieuw ingesteld. Pas na N milliseconden stilte wordt de handler uiteindelijk één keer uitgevoerd. Debouncen beantwoordt de vraag: "voer dit uit nadat de gebruiker klaar is met iets doen".

Wat throttlen doet

Throttlen beperkt de uitvoering tot maximaal één keer per tijdsinterval, ongeacht hoeveel gebeurtenissen er worden geactiveerd. Als de gebruiker snel scrollt, zorgt een throttle van 100 ms ervoor dat je handler maximaal 10 keer per seconde wordt uitgevoerd. Throttlen beantwoordt de vraag: "voer dit regelmatig uit, maar niet vaker dan elke N ms".

Wanneer je moet debouncen

Debouncen is de juiste keuze wanneer alleen de uiteindelijke waarde telt nadat de gebruiker is gestopt. Klassieke gevallen zijn invoer voor een zoekopdracht (stuur een API-verzoek nadat het typen is gepauzeerd), een handler voor het wijzigen van de venstergrootte (bereken de indeling opnieuw nadat het wijzigen is gestopt) en validatie van een formulierveld die een server controleert (wacht met valideren totdat de volledige invoer beschikbaar is).

Wanneer je moet throttlen

Throttlen is de juiste keuze wanneer je regelmatig wilt bijwerken tijdens voortdurende activiteit. Klassieke gevallen zijn een handler voor de scrollpositie (werk een voortgangsbalk voor het lezen of een vastgezette kop maximaal 30 keer per seconde bij), het bijhouden van muisbewegingen (registreer de cursorpositie voor analyses) en handlers voor sleepgebeurtenissen (werk de positie van een versleepbaar element vloeiend bij zonder te veel gebeurtenissen te genereren).

Eenvoudige implementaties hebben valkuilen

Zelf een debounce of throttle schrijven zonder volledig begrip ervan leidt tot fouten, zoals het missen van de laatste gebeurtenis (aan het einde), activeren aan de verkeerde kant of timers niet opruimen wanneer een component wordt ontkoppeld. Over het algemeen kun je beter grondig geteste implementaties uit bibliotheken zoals lodash gebruiken, omdat die alle randgevallen correct afhandelen.

lodash.debounce en lodash.throttle

Lodash biedt _.debounce(fn, wait) en _.throttle(fn, wait) met opties voor gedrag aan het begin en einde van een interval. De geretourneerde functie heeft een methode .cancel() om een geplande aanroep af te breken en een methode .flush() om die onmiddellijk uit te voeren. In React moet je deze functies in useRef opslaan om te voorkomen dat ze bij elke nieuwe render opnieuw worden gemaakt.

Prestatiebudget

Zelfs 50 extra React-opnieuwrenderingen per seconde door een niet-geregelde scroll-handler kunnen aanzienlijk veel processorcapaciteit gebruiken, vooral op mobiele apparaten uit het lagere segment. Een framebudget van 16 ms (60 fps) betekent dat elke nieuwe render in minder dan 16 milliseconden moet zijn voltooid om verloren frames te voorkomen. Debouncen en throttlen zijn je eerste verdedigingslinie tegen problemen met de beeldfrequentie.

Gebeurtenishandler versus state-update

Niet voor elke handler met hoge frequentie is debouncen nodig. Als de gebeurtenishandler alleen een waarde uitleest zonder state bij te werken of API's aan te roepen — bijvoorbeeld door de laatste muispositie in een ref op te slaan — is debouncen niet nodig. Debounc of throttle alleen handlers die dure bewerkingen starten: state-updates, API-aanroepen of DOM-metingen.

Gedebouncete functies annuleren

Wanneer een component wordt ontkoppeld, moet elke geplande gedebouncete aanroep worden geannuleerd om een state-update na het ontkoppelen te voorkomen. Als je een useRef gebruikt om de gedebouncete functie op te slaan, roep je debouncedFn.cancel() aan in de opruimfunctie van useEffect. Gedebouncete functies van Lodash bieden deze methode precies voor dit doel.

Gebruik van debouncen versus throttlen

Welke techniek gebruik je om een API-aanroep te doen wanneer de gebruiker stopt met typen in een zoekveld?

Samenvatting van de les: debouncen en throttlen

Gebeurtenissen met een hoge frequentie, zoals keypress, scroll en resize, kunnen prestatieproblemen veroorzaken als handlers bij elke gebeurtenis worden uitgevoerd. Debouncen wacht op stilte en is het meest geschikt voor zoekvelden en handlers voor het wijzigen van de venstergrootte. Throttlen beperkt de frequentie en is het meest geschikt voor scrollen en slepen. Gebruik Lodash-implementaties die in refs zijn opgeslagen en annuleer ze altijd wanneer een component wordt ontkoppeld.

Gratis beginnen

Leer React met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
88
Lessen
324

Veelgestelde vragen

Is de les “Waarom debounce en throttle belangrijk zijn in UI's” gratis?

Ja — de volledige tekst van “Waarom debounce en throttle belangrijk zijn in UI's” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus React Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus React Academy bevat in totaal 4 lessen.

Wat leer ik in “Waarom debounce en throttle belangrijk zijn in UI's”?

Krijg inzicht in de prestatiekosten van niet-beperkte handlers voor keypress, scroll en resize, en wanneer u elke oplossing toepast Je oefent met React Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met React Academy te beginnen?

Ervaring vooraf is niet nodig. React Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Waarom debounce en throttle belangrijk zijn in UI's”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over React Academy?

Ja. Elke les over React Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Waarom debounce en throttle belangrijk zijn in UI's
  2. Een aangepaste useDebounce-hook implementeren
  3. Een aangepaste useThrottle-hook implementeren
  4. Praktische toepassingen: zoeken, scrollen, vergroten/verkleinen
← Terug naar React Academy