개발
Javascript 함수 중복 호출 막기(제어)
255 views as of September 26, 2024.
앞단 서브밋에 해당하는 특정 함수를 여러번 실행되지 못하게 막을 필요성이 있어서 아래와 같은 함수를 적용해보았다.
function throttle(func, delay) {
let lastCall = 0;
return function(...args) {
const now = new Date().getTime();
if (now - lastCall >= delay) {
lastCall = now;
func.apply(this, args); // 원래 함수 호출
}
};
}
// 첫 번째는 바로 실행되고, 이후 특정시간 동안은 추가 호출을 무시함
const throttledUpdateWorkLog = throttle(updateWorkLog, 1000);
Copy
원리는 무진장 간단하다.
함수 하나를 받아서 실행시킬때 그 함수의 호출시간을
lastCall
변수에 저장해두고 이후 함수 호출시 현재시간 now
에서 기존 lastCall
변수의 값을 뺀값이 delay
의 값보다 크면 특정시간이 지났다고 가정해서 함수의 호출을, 그렇지 않으면 무시하는 방법이다.여기서
not
, lastCall
, delay
는 timestamp ms
단위로 제어한다.throttle
함수 선언후 throttleYourFunction
으로 기존의 함수를 감싸서 다시 선언해주고 실제로 사용하는 곳에서는 기존 함수명을 사용하는게아니라 throttleYourFunction
명을 사용해서 호출하면된다.기존에
yourFunction(params)
처럼 호출했다면 throttleYourFunction(params)
처럼 호출해야된다는 의미.이 코드를 어디 적용할만하냐면 저장버튼이나 다운로드 버튼을 연타하는 고객의 행동을 제어할 수 있다. 이런 쓰로틀을 거는 행위는 물론 백단에서도 처리하는게 맞긴한데, 앞단에서 스크립트로 가볍게 제어할 수 있다는것도 이번에 알게 되었다. 끝.
#JavaScript
0
개의 댓글
개발 카테고리의 다른 글
09/30/2024
CSS 그라데이션, 그림자 시뮬레이터 사이트
가끔 퍼블지원 하다가 그라데이션이나 그림자 시뮬레이터로 빠르게 제작할때 보는 사이트들을 나열해 보았다. CSS 그라디언트CSS...
09/24/2024
SSL 인증서 비밀번호 제거 방법
외부 발급된 SSL 인증서를 우리 회사 Nginx 서버에 적용하고 reload하는 과정에 인증서 비밀번호를 입력하라는 메시지가 떳다....
09/23/2024
Ubuntu 로그 100개 떼어보기
요즘 웹서버를 운용하다가 보면 이상징후가 나타날때 곧잘 nginx 로그를 들여다본다. 근데 이 로그 들여다보는게 여간 쉽지가 않...