アンチディザリング
この関数は、高周波イベントがトリガーされてからn秒後に一度だけ実行され、n秒後に再び高周波イベントがトリガーされた場合は、時間が再計算されます。
function debounce(fn, wait) {
let timeout = null;
return function() {
clearTimeout(timeout);
timeout = setTimeout(() => {
fn.apply(this, arguments);
}, wait)
}
}
スロットリング
高頻度イベントはトリガーされますが、n秒間に1回しか実行されないので、スロットリングは関数の実行頻度を薄めます。アンチスロットリングとの違いは、各関数呼び出しが最後に実行されるのに対し、アンチスロットリングは最後にしか実行されないことです。
function throttle(fn, wait) {
let onOff = true;
return function() {
if (!onOff) {
return;
}
onOff = false;
setTimeout(() => {
fn.apply(this, arguments);
onOff = true;
}, wait)
}
}