자 바스 크 립 트 의 떨 림 방지 와 절 류 를 이야기 해 보도 록 하 겠 습 니 다.
JavaScript 떨 림 방지 및 스로틀
문제 복원
우 리 는 먼저 코드 를 통 해 흔히 볼 수 있 는 문 제 를 복원 합 니 다.
window.onload = function(){
//
let norInput = document.getElementById('normal');
let ajax = content=>{
console.log('ajax:' + content);
}
norInput.addEventListener('keyup',e=>{
ajax(e.target.value)
})
// console.log(debounce()())
}
위의 프로그램 에 서 는 문제 가 없어 보이 지만 사용자 가 문 자 를 입력 할 때마다 백 엔 드 에 요청 을 합 니 다. 이것 은 사용자 일 뿐 입 니 다. 만약 에 많은 사용자 가 똑 같은 조작 을 하면 서버 에 큰 부담 을 주 는 것 과 다 름 없습니다.
이런 문 제 를 해결 하 는 데 는 여러 가지 적절 한 방법 이 있 지만 다음 에 말 하고 자 하 는 것 은
JavaScript
중의
과
조작 에 관 한 것 이다.떨 림 방지
떨 림 방지 가 뭐야?
사용자 가 한 번 의 이벤트 n 초 를 촉발 한 후에 리 셋 함 수 를 실행 하고, 반복 적 으로 촉발 하면 다시 시간 을 잽 니 다.
의 논리 에 따라 다음은 코드 를 통 해 시 뮬 레이 션 을 한다.
window.onload = function(){
let norInput = document.getElementById('normal');
// ajax
let ajax = content=>{
console.log('ajax:' + content);
}
//
let debounce = (fn,delay) => {
return function(args){
let that = this;
let param = args;
// timmer
clearTimeout(fn.id);
fn.id = setTimeout(function(){
fn.call(that,param)
},delay)
}
}
let deb_func = debounce(ajax,500)
norInput.addEventListener('keyup',e=>{
deb_func(e.target.value)
})
}
위의
demo
가 실 행 된 후에 사용자 가 입력 을 멈 춘 후에 야 요청 ajax
을 할 수 있 습 니 다. 사용자 가 계속 입력 하면 타 이 머 는 계속 갱신 되 고 이 과정 에서 요청 이 발생 하지 않 습 니 다. 사용자 가 입력 을 멈 출 때 까지 시간 을 재 고 시간 이 되면 요청 을 보 낼 수 있 습 니 다.이렇게 하면 잦 은 전송 요청 으로 서버 에 과도 한 스트레스 를 줄 일 수 있다.
필드 사용
절 류 는 무엇 입 니까?
시간 범 위 를 설정 하고 일정한 시간 범위 내 에서 한 번 에 한 번 만 이벤트 의 리 셋 함 수 를 실행 할 수 있 습 니 다. 즉, 규정된 시간 범위 내 에서 이벤트 가 몇 번 촉발 되 든 한 번 만 리 셋 함 수 를 실행 할 수 있 습 니 다.
우 리 는
click
사건 을 통 해 사고 현장 을 복원 했다.
let oBtn = document.getElementById('btn');
let ajax = ()=>{
console.log("ajax ")
}
oBtn.addEventListener('click',()=>{
ajax();
})
사용자 가 클릭 할 때마다 요청 을 보 내 고 클릭 이 끊 이지 않 으 며 요청 이 끊 이지 않 습 니 다.와 같다
,
.지루 하 게 계속 클릭 하 는 사람 이 있 으 면 요청 횟수 가 상당 해 질 것 으로 예상 된다.다음은 우리 가
의 원리 에 따라 실현 한 예시 코드 이다.
window.onload = function(){
//
let oBtn = document.getElementById('normal');
// ajax
let ajax = ()=>{
console.log("ajax ....")
}
//
let throttle = (func,wait) =>{
var timeout ;
var previous = 0;
return function(){
var _this = this;
args = arguments;
if(!timeout){
timeout = setTimeout(function(){
timeout = null;
func.apply(_this,args);
},wait)
}
}
}
let thro_func = throttle(ajax,3000);
//
oBtn.addEventListener('click',()=>{
thro_func();
})
}
위의 사례 를 통 해 우 리 는 사용자 가 한 번 클릭 한 후에 타 이 머 를 시작 할 수 있 습 니 다. 그 중에서 몇 번 의 사건 이 발생 하 더 라 도 리 셋 을 한 번 만 수행 할 수 있 습 니 다.
물론 절 류 를 실현 하 는 방법 은 타이머 라 는 방안 뿐만 아니 라 시간 스탬프 를 사용 할 수도 있 고 다른 방법 도 안 되 는 것 이 아니다. 본 고의 목적 은 서버 의 압력 을 줄 이 는 두 가지 방법 을 논술 하고 설명 하기 위 한 것 일 뿐이다.
필드 사용
다음으로 전송:https://www.cnblogs.com/liujunhang/p/11405851.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.