Comments 14
Спасибо, очень познавательно.
Underscore/lodash вам в помощь. Для сложных анимация с css transitions есть событие об окончании анимации.
у автора другая задача не «сделать что-то после анимации», а «не дать сделать во время»
Сюда загляните
А так же ознакомьтесь с lodash debounce и throttle и поэксперементируйте чтоб понять в чем между ними разница
А так же ознакомьтесь с lodash debounce и throttle и поэксперементируйте чтоб понять в чем между ними разница
В lodash (в отличие от underscore) у метода Debounce больше параметров, благодоря этому throttle — обертка над debounce
github.com/lodash/lodash/blob/master/lodash.js#L7769
github.com/lodash/lodash/blob/master/lodash.js#L7769
Еще одна полезная ссылка чтобы понимать разницу в реализации drupalmotion.com/article/debounce-and-throttle-visual-explanation
Лайфхак —
запускаем timeout на «известное время»(например 1/60 сек) и считаем другим, более крупным, таймером сколько раз он успел «тикнуть».
Если >50 — значил Idle state, можно что-то сохранить.
Если <30 — значит busy, нужно подождать.
Я правильно понял, что если у нас будет подряд два раза вызываться дебаунсер с разными колбэками, то первый колбэк не выполнится?
Например:
И получается, что в дебаунсере таймаут на чтение постов очистится, и выполнится только обновление комментариев?
Например:
debounce(1000, loadMorePosts);
debounce(1000, loadMoreComments);
И получается, что в дебаунсере таймаут на чтение постов очистится, и выполнится только обновление комментариев?
Да нет, выполнятся оба. timeout локальная скрытая переменная, для каждого вызова будет свой timeout. Вот если бы было так
Тогда да, а так нет.
var timeout = null;
function debounce(ms, cb){
return function(){
if(timeout) clearTimeout(timeout);
timeout = setTimeout(cb, ms);
}
}
Тогда да, а так нет.
Я вот только не понял — при чём тут время простоя и фоновые задачи?
Буквально неделю назад писал код обращения к API, нужно было отправлять запрос после N миллисекунд после набора текста, вот моя версия:
Не знал, что это называется Дебаунсер.
Самое неприятное в процессе написания было в том, что удалить можно только существующий таймер и пришлось создавать пустой.
timeout_id=setTimeout(function(){},1);
$('#input').keyup(function() {
$('#list').html('Пожалуйста подождите...');
clearTimeout(timeout_id);
timeout_id=setTimeout(getAddress,700);
});
Не знал, что это называется Дебаунсер.
Самое неприятное в процессе написания было в том, что удалить можно только существующий таймер и пришлось создавать пустой.
Sign up to leave a comment.
Используем время простоя веб-приложения для фоновых задач