티스토리 뷰

스크롤 이벤트를 다루면서 디바운싱과 쓰로틀링에 대한 개념을 새롭게 알게 되어 정리해두려고 한다.

디바운싱

method가 호출된 이후 일정시간이 지나기 전에 호출되지 않도록 하는 것

디바운싱은 키보드 타이핑을 입력하는 input이벤트의 경우 키 입력이 들어올 때마다 method를 호출하기 때문에 불필요한 method 호출을 줄이기 위해 주로 사용한다고 합니다. 이벤트가 발생할 때마다 일정 시간을 설정하고 그 시간 내에 다시 method 호출이 발생하면 기존의 시간을 리셋합니다. 만약 일정 시간이 지나도 method 호출이 없다면 그때 호출된 method에 대해서 연산을 수행하는 방식입니다.

 

디바운싱 적용 전

...
  <input id='input'>
...

  <script>
    //디바운싱 적용 전
    console.log('### 디바운싱 적용 전');
    document.getElementById('input').addEventListener('input', function(e) {
      console.log('method 호출', e.target.value);
    });
  </script>

  ...

키보드를 입력할 때마다 console.log가 작동하는 것을 확인할 수 있다.

 

디바운싱을 적용 후

...
  <input id='input'>
...

  <script>
    // 디바운싱 적용 후
    console.log('### 디바운싱 적용 후');
    var timer;
    document.getElementById('input').addEventListener('input', function(e) {
      if (timer) clearTimeout(timer);

      timer = setTimeout(function() {
        console.log('method 호출', e.target.value);
      }, 200);
    });
  </script>

...

디바운싱 적용 후에 확연히 메소드 호출이 입력 후에 한 번만 나타나는 것을 볼 수 있다.


쓰로틀링

일정 시간을 설정해 method가 호출된 이후 그 시간동안은 재호출 할 수 없도록 하는 방법

스크롤 이벤트에 많이 사용된다고 한다.

 

쓰로틀링 적용전

...
  <div style='height: 1000px'></div>
...

  <script>
    //쓰로틀링 적용 전
    window.addEventListener('scroll', function(e) {
      console.log(window.scrollY);
    });

  </script>
  ...

스크롤을 조금 움직여도 method가 많이 호출되는 것을 확인할 수 있다.

 

쓰로틀링 적용 후

...
  <div style='height: 1000px'></div>
...
  <script>
    //쓰로틀링 적용 후
    console.log('### 쓰로틀링 적용 후');

    var timer;
    window.addEventListener('scroll', function(e) {
      if (!timer) {
        timer = setTimeout(function() {
          timer = null;
          console.log(window.scrollY);
        }, 300);
      }
    });
  </script>
...

비슷하게 스크롤했을 때 쓰로틀링 후에는 확연하게 호출 횟수가 줄어든 것을 확인할 수 있었다.

 

 

쓰로틀링과 디바운싱 모두 불필요한 method 호출을 줄여준다는 점이고,

차이점이라면 디바운싱은 몇 번을 호출하더라도 마지막 호출만 처리해주고, 쓰로틀링은 주기적으로 호출해준다는 점이 다를 수 있다.

 

두 가지 개념은 성능 면에서 아주 좋고, 알아두면 자주 사용할 수 있는 개념이라는 생각이 들었다.

 

쓰로틀링_디바운싱.html
0.00MB

'JavaScript' 카테고리의 다른 글

Loop  (0) 2022.05.30
Intersection Observer를 통한 무한 스크롤 구현  (0) 2022.03.10
[JS] querySelector 와 getElementBy~  (0) 2021.12.22
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함