Debouncing and throttling are techniques in JavaScript to optimize the application and browser performance. These are programming concept not provided by JavaScript directly.
Table of Contents
Debouncing:
Debouncing is the way to wait or delay the execution of function for a certain amount of time to execute function again. In other words, it limits the rate at which a function gets invoked.
Implementation of Debouncing:
- Start with 0 timeout.
- If the debounced function is called again, reset the timer to the specified delay.
- In case of timeout, call the debounced function.
let debounce = function (func, delay) { let timer; return function (...args) { let context = this; clearTimeout(timer); timer = setTimeout(() => { // console.log('In the log of timeout') func.apply(context, args) }, delay); } }
Throttling:
This is the technique which help to call a function after a fixed interval of time means it ignore all function call in between that time interval.
Throttling is a technique in which the attached function will be executed only once in a given time interval. No matter how many times the user fires the event, only the first fired event is executed immediately.
Implementation of Throttling:
let throtling = function (func, delay) { let isTriggered; return function (...args) { if (!isTriggered) { isTriggered = true; let context = this; // clearTimeout(timer); timer = setTimeout(() => { func.apply(context, args); isTriggered = false; }, delay); } } }
Complete code:
<body> <button id="dbtn">Debouncing Button</button> <button id="tbtn">Throtling Button</button> <!-- <script src="debouncing_throtling.js"></script> --> <script> let debounce = function (func, delay) { let timer; return function (...args) { let context = this; clearTimeout(timer); timer = setTimeout(() => { // console.log('In the log of timeout') func.apply(context, args); }, delay); }; }; let throtling = function (func, delay) { let isTriggered; return function (...args) { if (!isTriggered) { isTriggered = true; let context = this; // clearTimeout(timer); timer = setTimeout(() => { func.apply(context, args); isTriggered = false; }, delay); } }; }; document.querySelector("#dbtn").addEventListener( "click", debounce(function () { console.info("Hey! It is debouncing", new Date().toUTCString()); }, 3000) ); document.querySelector("#tbtn").addEventListener( "click", throtling(function () { console.info("Hey! It is throtling", new Date().toUTCString()); }, 3000) ); </script> </body>
Image Credit
- Debouncing & Throttling in JavaScript | by Chidanandan P | Nerd For Tech | Medium
- Debouncing and Throttling in JavaScript: Comprehensive Guide | by Ayush Verma | Towards Dev