ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 41_Timer
    모던 자바스크립트 딥 다이브 독학 2023. 12. 25. 12:29

    호출 스케줄링

    함수를 명시적으로 호출하면 함수가 즉시 실행됨. 함수를 명시적으로 호출하지 않고 일정 시간이 경과된 이후에 호출되도록 함수 호출을 예약하려면 타이머 함수를 사용 → 호출 스케줄링

    • 타이머 생성: setTimeout, setInterval
    • 타이머 제거: clearTimeout, clearInterval
    • 타이머 함수는 ECMAScript 빌트인 함수가 아닌 브라우저 환경, Node.js 환경의 전역 객체 메서드이면서 호스트 객체다.
    • 자바스크립트 엔진은 싱글 스레드로 동작하기 때문에 타이머함수는 비동기 처리 방식으로 동작

    타이머 함수

    • setTimeout/clearTimeout → 생성된 타이머를 식별할 수 있는 고유한 타이머 id 반환

        setTimeout(() => console.log('Hi!'), 1000); 
        // 1초(1000ms) 후 타이머가 만료되면 콜백함수 호출
      
        setTimeout(name => console.log(`Hi! ${name}.`), 1000, 'Kim'); 
        // 콜백 함수에 'Kim'을 인수로 전달
      
        setTimeout(() => console.log('Hello!)); 
        // 두 번째 인수 생략하면 기본값 0 지정
      
        const timerId = setTimeout(() => console.log('Hi!'), 1000);
        clearTimeout(timerId); 
        // 타이머가 취소되면 setTimeout 함수의 콜백 함수가 실행되지 않는다.
    • setInterval / clearInterval

        let count = 1;
        //1초 후 타이머가 만료될 때마다 콜백 함수가 호출된다.
        const timeoutId = setInterval(() => {
            console.log(count); // 1 2 3 4 5
            if (count++ === 5) clearInterval(timeoutId);
        }, 1000);
        //count가 5이면 타이머를 취소한다.

    디바운스, 스로틀

    • 짧은 시간 간격으로 연속해서 발생하는 이벤트(scroll, resize, input, mousemove 등)에 바인딩한 이벤트 핸들러는 과도하게 호출되어 성능에 문제를 일으킬 가능성이 존재.
    • 디바운스와 스로틀은 이러한 이벤트를 그룹화해서 과도한 이벤트 핸들러의 호출을 방지하는 프로그래밍 기법이다.
    • 디바운스와 스로틀의 구현에는 타이머 함수가 사용된다.
    • 디바운스: 짧은 시간 간격으로 이벤트가 연속해서 발생하면 이벤트 핸들러를 호출하지 않다가 일정 시간이 경과한 이후 이벤트 핸들러가 한 번만 호출되도록 한다.
    • 스로틀: 짧은 시간 간격으로 이벤트가 연속해서 발생하더라도 일정 시간 간격으로 이벤트 핸들러가 최대 한 번만 호출되도록 한다.(일정 시간 단위의 호출 주기를 만든다)
    • 실무에서는 Underscore, Lodash의 debounce, throttle 함수를 사용하는 것을 권장

    '모던 자바스크립트 딥 다이브 독학' 카테고리의 다른 글

    43_Ajax  (0) 2024.01.01
    42_Synchronous & Asynchronous  (1) 2023.12.27
    40_Event  (1) 2023.12.20
    39_Dom  (0) 2023.12.14
    38_Rendering  (0) 2023.12.12
Designed by Tistory.