Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

41장 타이머 #43

Open
humonnom opened this issue May 28, 2022 · 0 comments
Open

41장 타이머 #43

humonnom opened this issue May 28, 2022 · 0 comments
Assignees

Comments

@humonnom
Copy link
Collaborator

humonnom commented May 28, 2022

41장 타이머

호출 스케줄링

  • 함수는 명시적으로 호출하면 실행됨
  • 이후에 호출되도록 예약하고 싶으면 타이머 함수를 사용함

디바운스와 스로틀

  • scroll, resize, input, mousemove => 짧은 시간 연속으로 발생
  • 연속으로 발생하는 이벤트를 그룹화 하는 프로그래밍 기법(타이머 함수 사용)

디바운스

  • 이벤트를 그룹화하여 마지막에 한번만 이벤트 핸들러를 호출하도록 함
const $target = document.querySelector('body');
const $input = document.createElement('input');
const $msg = document.createElement('div');
$msg.textContent = "초기상태";
$target.append($input, $msg);

// 디바운스 함수 구현
const debounce = (callback, delay) => {
    let timerId;
    return event => {
        console.log('디바운스');
        if (timerId) clearTimeout(timerId); // 등록된 ID가 있다면 delay만큼 경과되지 않은 것이므로 해당 ID의 예약 취소
        timerId = setTimeout(callback, delay, event); // 새로 등록
    }
}
// 이벤트 추가
$input.oninput = debounce(e => {
    $msg.textContent = e.target.value;
}, 300);
  • 타이머의 등록과 취소가 event 시점마다 발생
  • 등록된 타이머를 체크하여 취소 후 다시 등록함
  • 일정 기간(delay) 이벤트가 일어나지 않으면 콜백 함수가 동작함
    • 등록된 타이머가 취소되지 않는 원리
  • 실무에서는 Underscore의 debounce 함수, Lodash의 debounce 함수 사용

쓰로틀링

  • delay로 설정한 시간당 한번만 함수가 호출되도록 함
  • 디바운스와 다르게 타이머가 등로되는 기준이 delay이며 등록한 타이머를 취소하지 않음
  • 한번 동록된 타이머는 실행되며, 타이머가 등록되어있는 동안(즉, delay 기간 동안)에는 아무 동작을 하지 않음으로써 이벤트를 무시한다.
  • 스크롤 이벤트 처리, 무한 스크롤 UI 구현등에 적합
  • 실무에서는 Underscore의 throttle 함수, Lodash의 throttle 함수 사용

리액트 디바운스, 스로틀

@humonnom humonnom self-assigned this May 28, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant