당신이하고있는 일을 "debounce"라고합니다. 디 바운스 (debounce)는 사용자가 입력을 시작할 때 타이머의 카운트 다운을 시작하는 것입니다. 타이머가 끝나기 전에 더 많은 입력을 입력하면 타이머가 재설정되고 다시 카운트 다운을 시작합니다. 타이머가 완료 될 때만 AJAX 호출이 이루어집니다. 이 경우 200ms의 지연은 대부분의 사람들이 여전히 반응을 느낄 것으로 생각하는 연구 결과입니다.
그러나 실제로 사용자가 입력하는 동안 결과가 부어지기를 원하면 대신 필요한 것을 "스로틀"이라고합니다. 스로틀은 디버깅과 비슷하지만, 입력이 멈출 때까지 기다리는 것이 아니라 규칙적인 간격으로 트리거한다는 점만 다릅니다. 하나의 타이머를 만들려면 타이머가 있어야하지만, 사용자가 더 많은 입력을 입력 할 때마다 타이머를 재설정하지는 않습니다. 대신 새로운 입력이 입력되었는지 여부를 추적하기 위해 부울을 사용합니다. 타이머가 끝나면 boolean이 true인지 확인하고 false이면 false로 설정하고 타이머를 다시 시작합니다.
AJAX 호출이 이미 발생했는지 여부를 추적하여 두 가지 방법 모두를 향상시킬 수 있습니다. 두 경우 모두, 타이머가 만료되고 통화가 진행중인 경우 부울 추적이 참이면 타이머를 다시 시작하십시오.
debounce과 throttle은 모두 lodash와 같은 여러 유틸리티 라이브러리에서 이미 사용할 수 있습니다. 이를 사용하여 기존 이벤트 핸들러를 랩핑 할 수 있습니다.
var myInputChangeHandler = function() {
// do ajax call
};
// throttled handler will only be called every 200 ms...
var throttled = _.throttle(myInputChangeHandler, 200);
// ...no matter how many times this event fires
jQuery('input[type=text]').on('change', throttled);
내일이 답변이 – Soviut
에게 내가 올바른 할 수있는 표시하는 것을 잊지 마세요 – LunielleDev