На собеседованиях часто спрашивают о троттлинге и анти-шейке, и их легко спутать, здесь мы запишем реализацию функций троттлинга и анти-шейка.
1. Дросселирование
Он выполняется только один раз в начале, а игнор срабатывает в процессе невыполнения завершения, ядро заключается в开关锁🔒.
Например:多次点击按钮представить форму,第一次有效
// 节流
function throttle(fn, delay) {
var timer = null;
return function () {
if (timer) { return false;}
var that = this;
var args = arguments;
fn.apply(that, args);
timer = setTimeout(function () {
clearTimeout(timer);
timer = null;
}, delay || 500);
};
}
// 使用
function clickHandler() {
console.log('节流click!');
}
const handler = throttle(clickHandler);
document.getElementById('button').addEventListener('click', handler);
2. Защита от сотрясений
Выполнять только последнюю запущенную асинхронную задачу и очищать предыдущую асинхронную задачу.清零.
Например:页面滚动Обработайте событие, введите ассоциацию в поле поиска
最后一次有效
// 防抖
function debounce(fn, delay) {
var timer = null;
return function () {
var that = this;
var args = arguments;
clearTimeout(timer);// 清除重新计时
timer = setTimeout(function () {
fn.apply(that, args);
}, delay || 500);
};
}
// 使用
function clickHandler() {
console.log('防抖click!');
}
const handler = debounce(clickHandler);
document.getElementById('button').addEventListener('click', handler);
При запутанных вопросах помните:节流第一次有效,防抖反之