41 타이머

호출 스케줄링
타이머 함수를 통해 일정 시간이 경과한 이후에 호출되도록 함수 호출을 예약하는 것
타이머함수
setTimeout, setInterval - 타이머 생성
clearTimeout, cleatInterval - 타이머 제거
⇒ 빌트인 함수가 아니라 전역객체의 메서드로 제공 → 호스트 객체임
setTimeout
딱 한번 동작
setInterval
반복동작
타이머 함수는 비동기 처리방식으로 작동함 → js엔진은 싱글스레드이므로
타이머 함수
setTimeout/clearTimeout
setTimeout은 두번째 인수로 받은 시간으로 단 한번 동작하는 타이머를 생성함
이후 만료되면, 첫 인수의 콜백함수가 호출됨
const timer=setTimeout(func, delaytime, [param1,param2...])
func : 콜백함수
delaytime : 타이머 시간
param1, param2 … : 콜백함수에 전달해야할 인수
예시
setTimeout(name=>console.log(name), 1000, "lee");
반환값
타이머를 식별하기 위한 고유한 타이머id를 반환함
브라우저 환경인 경우 숫자. nodejs는 객체.
clearTimeout
인수로 타이머 id를 받아서 타이머 취소가능
const timer=setTimeout(name=>console.log(name), 1000, "lee");
clearTimeout(timer);
setInterval/clearInterval
두번째 인수로 전달받은 시간으로 반복동작하는 타이머를 생성함
만료될때마다 첫 인수로 전달받은 콜백함수가 반복호출됨
const timerId=setInterval(func, delaytime, [param1,param2...])
마찬가지로 식별 id를 반환하며, 이를 clearInterval을 통해 취소할 수 있음
디바운드와 스로틀
짧은 시간 간격으로 연속해서 발생하는 이벤트를 그룹화하여 과도한 이벤트 핸들러 호출을 방지하는 프로그래밍 기법
디바운스
짧은 간격으로 이벤트가 연속해서 발생하면 이벤트 핸들러를 호출하지 않다가 일정 시간이 경과한 이후, 딱 한번 이벤트가 호출되게 하는 것
⇒ 이벤트를 그룹화하여 한번만 실행되게하는것
const debounce = (callback, delay)=>{
let timeId;
return event=>{
if(timeId) clearTimeout(timerId);
timerId=setTimeout(callback, delay, event);
}
}
$node.oninput=debounce(e=>{
$msg.textContent=e.target.value;
}, 300);
⇒ 입력이 발생하였을때 3초 있다가 반영되도록 함
입력이 완료되었을때(마지막으로 입력받은 후 3초가 지나면), Ajax 통신을 하도록 활용이 가능함
실무에서는 Underscore의 debounce 함수나 Lodash의 debounce 함수 사용
스로틀
짧은 시간 간격으로 발생하는 이벤트를 그룹화하여 일정단위 시간으로 이벤트가 호출되도록 호출주기를 만듦
const throttle=(callback, delay)=>{
let timerId;
return event=>{
if(timerId) return;
timerId=setTimeout(()=>{
callback(event);
timerId=null;
},delay, event);
};
};
특정 시간이 다 지나갈 때까지 이벤트를 발생시키지 않음
scroll event처리나 무한 스크롤 UI구현에 사용됨
underscore의 throttle 함수나 lodash의 throttle함수 사용
41 타이머

호출 스케줄링
타이머 함수를 통해 일정 시간이 경과한 이후에 호출되도록 함수 호출을 예약하는 것
타이머함수
setTimeout, setInterval - 타이머 생성
clearTimeout, cleatInterval - 타이머 제거
⇒ 빌트인 함수가 아니라 전역객체의 메서드로 제공 → 호스트 객체임
setTimeout
딱 한번 동작
setInterval
반복동작
타이머 함수는 비동기 처리방식으로 작동함 → js엔진은 싱글스레드이므로
타이머 함수
setTimeout/clearTimeout
setTimeout은 두번째 인수로 받은 시간으로 단 한번 동작하는 타이머를 생성함
이후 만료되면, 첫 인수의 콜백함수가 호출됨
const timer=setTimeout(func, delaytime, [param1,param2...])
func : 콜백함수
delaytime : 타이머 시간
param1, param2 … : 콜백함수에 전달해야할 인수
예시
setTimeout(name=>console.log(name), 1000, "lee");
반환값
타이머를 식별하기 위한 고유한 타이머id를 반환함
브라우저 환경인 경우 숫자. nodejs는 객체.
clearTimeout
인수로 타이머 id를 받아서 타이머 취소가능
const timer=setTimeout(name=>console.log(name), 1000, "lee");
clearTimeout(timer);
setInterval/clearInterval
두번째 인수로 전달받은 시간으로 반복동작하는 타이머를 생성함
만료될때마다 첫 인수로 전달받은 콜백함수가 반복호출됨
const timerId=setInterval(func, delaytime, [param1,param2...])
마찬가지로 식별 id를 반환하며, 이를 clearInterval을 통해 취소할 수 있음
디바운드와 스로틀
짧은 시간 간격으로 연속해서 발생하는 이벤트를 그룹화하여 과도한 이벤트 핸들러 호출을 방지하는 프로그래밍 기법
디바운스
짧은 간격으로 이벤트가 연속해서 발생하면 이벤트 핸들러를 호출하지 않다가 일정 시간이 경과한 이후, 딱 한번 이벤트가 호출되게 하는 것
⇒ 이벤트를 그룹화하여 한번만 실행되게하는것
const debounce = (callback, delay)=>{
let timeId;
return event=>{
if(timeId) clearTimeout(timerId);
timerId=setTimeout(callback, delay, event);
}
}
$node.oninput=debounce(e=>{
$msg.textContent=e.target.value;
}, 300);
⇒ 입력이 발생하였을때 3초 있다가 반영되도록 함
입력이 완료되었을때(마지막으로 입력받은 후 3초가 지나면), Ajax 통신을 하도록 활용이 가능함
실무에서는 Underscore의 debounce 함수나 Lodash의 debounce 함수 사용
스로틀
짧은 시간 간격으로 발생하는 이벤트를 그룹화하여 일정단위 시간으로 이벤트가 호출되도록 호출주기를 만듦
const throttle=(callback, delay)=>{
let timerId;
return event=>{
if(timerId) return;
timerId=setTimeout(()=>{
callback(event);
timerId=null;
},delay, event);
};
};
특정 시간이 다 지나갈 때까지 이벤트를 발생시키지 않음
scroll event처리나 무한 스크롤 UI구현에 사용됨
underscore의 throttle 함수나 lodash의 throttle함수 사용