[JavaScript]10Debouncing & Throttling
6829 ワード
Javascriptコードを記述する場合、
この場合に適用される技法は
概念説明の前の文書には、以下のDOM要素が存在する.
連続呼び出しの関数では、最後の関数または最初の関数のみが呼び出されます.
タイプするたびにタイマーを設定し、しばらく入力がなければ入力終了とします.
一定時間(ここでは300ミリ秒)前にタイピング入力が発生した場合、以前のタイマーをキャンセルし、新しいタイマーを設定します.
パケットの解除と同様ですが、入力期間中にも以前に要求されたタスクが定期的に実行されます.
最後の関数が呼び出されてからしばらくの間、再呼び出されないことを確認します.
タイマーが設定されている場合は何もしません.タイマーがない場合はタイマーを設定します.
タイマーは一定時間後に自分を解放し、要求を発行します.
参考資料:Zeroch-ThrotlingとDebounsing
EventListener
を使用してコードを記述することがよくありますが、検索やスクロール時に要求の数が大幅に増加することが多いです.この場合に適用される技法は
Debouncing
とThrottling
である.概念説明の前の文書には、以下のDOM要素が存在する.
<input id="search" />
なお、EventListener
は、以下のようにして使用することができる.document.querySelector('#search').addEventListener("input", (e) => {
console.log("검색 요청", e.target.value);
})
このようにコードを記述すると、大量のクエリーが発生し、コストが増加します.Debouncing
連続呼び出しの関数では、最後の関数または最初の関数のみが呼び出されます.
タイプするたびにタイマーを設定し、しばらく入力がなければ入力終了とします.
一定時間(ここでは300ミリ秒)前にタイピング入力が発生した場合、以前のタイマーをキャンセルし、新しいタイマーを設定します.
let timer;
document.querySelector('#search').addEventListener("input", (e) => {
if(timer) clearTimeout(timer);
timer = setTimeout(function() {
console.log("검색 요청(Debounce) : ", e.target.value)
}, 300);
})
Throttling
パケットの解除と同様ですが、入力期間中にも以前に要求されたタスクが定期的に実行されます.
最後の関数が呼び出されてからしばらくの間、再呼び出されないことを確認します.
タイマーが設定されている場合は何もしません.タイマーがない場合はタイマーを設定します.
タイマーは一定時間後に自分を解放し、要求を発行します.
let timer;
document.querySelector("#search").addEventListener("input", (e) => {
if (!timer) {
timer = setTimeout(() => {
timer = null;
console.log("검색 요청(Throttling) : ", e.target.value);
}, 300);
}
})
参考資料:Zeroch-ThrotlingとDebounsing
Reference
この問題について([JavaScript]10Debouncing & Throttling), 我々は、より多くの情報をここで見つけました https://velog.io/@gouz7514/자바스크립트-10.-Debouncing-Throttlingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol