웹 프론트엔드 JS 튜토리얼 JavaScript_javascript 기술에서 이벤트 함수의 고주파 트리거링 및 고주파 호출을 방지하는 방법

JavaScript_javascript 기술에서 이벤트 함수의 고주파 트리거링 및 고주파 호출을 방지하는 방법

May 16, 2016 pm 04:36 PM
javascript 이벤트 기능

웹페이지에서 JavaScript의 가장 기본적인 기능은 사용자 작업을 모니터링하거나 응답하는 것인데 이는 매우 유용합니다. 사용자의 작업 중 일부는 매우 빈번하고 일부는 매우 드뭅니다. 일부 리스너 기능은 번개처럼 빠르게 실행되는 반면 다른 기능은 가혹하여 브라우저를 죽음에 이르게 할 수 있습니다. 브라우저 창의 크기 조정 이벤트를 예로 들어 보겠습니다. 이 이벤트는 브라우저 창의 크기가 변경될 때마다 한 번 트리거됩니다. 리스너가 크면 브라우저가 곧 압도됩니다.

분명히 브라우저가 종료되는 것을 허용할 수는 없지만 삭제 리스너를 삭제할 수는 없습니다. 그러나 함수 호출 빈도를 제한하고 이벤트 함수 실행의 영향을 약화시킬 수 있습니다. 창의 크기가 변경될 때마다 리스너 함수를 한 번씩 트리거하는 대신, 이제 리스너 함수를 트리거하는 최소 간격을 특정 밀리초보다 크게 설정할 수 있으므로 합당한 호출 채널을 유지하고 사용자가 경험치는 파괴되지 않습니다. Underscore.js라는 좋은 js 도구 라이브러리가 있는데, 이 라이브러리에는 이벤트 함수 트리거의 빈도를 줄이는 리스너를 쉽게 만들 수 있는 간단한 방법이 있습니다.

자바스크립트 코드

주파수 감소 리스너의 코드는 매우 간단합니다.

코드 복사 코드는 다음과 같습니다.

//리스너 생성
var updateLayout = _.debounce(function(e) {

// 여기서 모든 레이아웃 업데이트를 수행합니다

}, 500) // 최소한 500밀리초마다 실행

// 이벤트 리스너 추가
window.addEventListener("resize", updateLayout, false);
...이 Underscore.js 코드의 맨 아래 레이어는 실제로 간격을 사용하여 이벤트 함수 호출 빈도를 확인합니다.

// 계속 호출되는 한 함수를 반환하지 않습니다.
// 호출이 중지된 후에 함수가 호출됩니다.
// N밀리초. `immediate`가 전달되면
에서 함수를 트리거합니다. // 후행 대신 선행 가장자리.
_.debounce = 기능(func, wait, 즉시) {
var 시간 초과;
반환 함수() {
var context = this, args = 인수;
var later = function() {
시간 초과 = null;
If (!immediate) func.apply(context, args);
};
var callNow = 즉시 && !timeout;
ClearTimeout(timeout);
timeout = setTimeout(나중에, 대기);
if (callNow) func.apply(context, args);
};
};


코드가 특별히 복잡하지는 않지만, 직접 작성하지 않아도 된다는 점은 축복입니다. 이 디바운스 기능은 다른 Underscore.js 기능에 의존하지 않으므로 이 메소드를 jQuery 또는 MooTools와 같이 자주 사용하는 js 도구 라이브러리에 매우 쉽게 추가할 수 있습니다.
코드 복사 코드는 다음과 같습니다.

// 무툴
Function.implement({
디바운스: 기능(잠깐, 즉시) {
var 시간 초과,
       func = this;
반환 함수() {
var context = this, args = 인수;
var later = function() {
시간 초과 = null;
If (!immediate) func.apply(context, args);
};
var callNow = 즉시 && !timeout;
ClearTimeout(시간 초과);
Timeout = setTimeout(나중에, 대기);
If (callNow) func.apply(context, args);
};
}
});

// 활용해보세요!
window.addEvent("resize", myFn.debounce(500));


위에서 언급한 것처럼 창의 크기 조정 이벤트는 빈도 감소 작업을 사용하는 가장 일반적인 장소입니다. 또 다른 일반적인 장소는 사용자의 키 입력에 따라 자동 완성 프롬프트를 제공하는 것입니다. 나는 귀하의 웹사이트를 보다 효율적으로 쉽게 만들 수 있는 이와 같은 코드 조각을 수집하는 것을 좋아합니다. 또한 매우 유용한 기능을 많이 제공하는 Underscore.js를 연구하는 것이 좋습니다.
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 Dec 17, 2023 pm 02:54 PM

WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법

WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 Dec 17, 2023 pm 05:30 PM

WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 Dec 17, 2023 am 09:39 AM

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 Dec 17, 2023 pm 12:09 PM

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법

간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법 간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법 Jan 05, 2024 pm 06:08 PM

간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법

JavaScript와 WebSocket: 효율적인 실시간 일기예보 시스템 구축 JavaScript와 WebSocket: 효율적인 실시간 일기예보 시스템 구축 Dec 17, 2023 pm 05:13 PM

JavaScript와 WebSocket: 효율적인 실시간 일기예보 시스템 구축

JavaScript에서 HTTP 상태 코드를 쉽게 얻는 방법 JavaScript에서 HTTP 상태 코드를 쉽게 얻는 방법 Jan 05, 2024 pm 01:37 PM

JavaScript에서 HTTP 상태 코드를 쉽게 얻는 방법

자바스크립트에서 insertBefore를 사용하는 방법 자바스크립트에서 insertBefore를 사용하는 방법 Nov 24, 2023 am 11:56 AM

자바스크립트에서 insertBefore를 사용하는 방법

See all articles