DEV Community

Akshay
Akshay

Posted on

🍭 Debouncing vs Throttling — Explained Through a Cute Story of a Daughter and Her Mother!

Performance optimization is a key part of frontend development, especially when handling rapid user interactions like typing, scrolling, or button clicks. That’s where two powerful techniques come into play — Debouncing and Throttling.

But these words sound fancy, right?

So let me break them down for you in a simple story involving a little girl and her mom — a story you’ll never forget 😉

👧 Debouncing — “Ask only after you stop asking!”

🧠 Real-World Scenario:
Imagine a little girl (the user) wants a candy (API call), and she keeps bugging her mom (the system) every few seconds:

“Mom, can I have candy? Can I have candy? Can I have candy?”

Mom gets overwhelmed. So she says:

“Ask me only once after you’re done talking for 5 seconds!”

Now, every time the girl opens her mouth again, the 5-second timer resets.

Finally, when she stays quiet for 5 seconds, mom gives her the candy 🍬

That’s Debouncing!

🔁 It waits for the last request, and only proceeds after the user stops asking for a while.

Image description

💻 Debounce Code Example

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Debounce Example</title>
</head>
<body>

  <textarea id="myInput" onkeyup="betterFunction()"></textarea>

  <script>
    let count = 0;

    function getData() {
      console.log('Function called ' + count++);
    }

    const myDebounce = (fn, delay) => {
      let timer;
      return function(...args) {
        if (timer) clearTimeout(timer); // Clear previous request

        timer = setTimeout(() => {
          fn();
        }, delay); // Wait until user stops
      };
    };

    let betterFunction = myDebounce(getData, 1000);
  </script>
</body>
</html>

Enter fullscreen mode Exit fullscreen mode

👧 Throttling — “You’ll get it, but only once in a while!”

Now let’s return to our girl and her candy.

This time, mom sets a rule:

“You’ll get only one candy every 10 minutes. Don’t keep asking!”

So if the girl asks at:

  1. Minute 1 ❌ (Ignored)
  2. Minute 3 ❌ (Ignored)
  3. Minute 7 ❌ (Ignored)
  4. Minute 10 ✅ (Gets candy!)

That’s Throttling!

🔁 It ensures that a function runs at most once in a specific time interval, even if it’s triggered many times.

Image description
💻 Throttle Polyfill Example

const myThrottle = (cb, delay) => {
  let last = 0;
  return (...args) => {
    let now = new Date().getTime();
    if (now - last < delay) return; // Ignore request if too soon
    last = now;
    return cb(...args);
  };
};
Enter fullscreen mode Exit fullscreen mode

🔄 Debounce vs Throttle — In a Nutshell

Image description

Top comments (1)

Collapse
 
nevodavid profile image
Nevo David •

Gotta say, the way you broke this down makes it stick way better for me, especially with those code bits after