Трюк с очисткой всех интервалов и таймаутов
Перечитывал JavaScript-Garden, в секции таймеров есть следующий код:
// удаляем "все" таймауты
for(var i = 1; i < 1000; i++) {
clearTimeout(i);
}
Авторы утверждают, что не все таймауты могут быть завершены этим циклом, и это утверждение не вызывает сомнений. Но способ остановить все таймауты (и интервалы) все-же есть. Фишка в том, что функции setTimeout и setInterval возвращают id таймера, который при каждом вызове увеличивается на 1 (и для интервалоц и таймаутов). Таким образом, если создать интервал прямо перед очисткой всех интервалов, то его id будет наибольшим. Все, кто имеет меньший id будут очищены:// удаляем все таймауты
var max_id;
max_id = setTimeout(function () {});
while (max_id--) {
clearTimeout(max_id);
}
$(‘#left, #right’).hover(function(){
$(this).fadeTo(500, 1);
}, function(){
$(this).fadeTo(500, 0.3);
});
Перестаёт работать после включения в код либо цикла выше, либо описанного способа с max_id. В чем может быть проблема?
для оптимизации repaint все анимации jQuery выполняет в собственном интервале (или интервале, реализованном через setTimeout, так называемый “гарантированный интервал”).
Этот трюк не должен использоваться в продакшене, пока ты не уверен, что готов ввести код, который может повлиять на все приложение.
Если все же надо найти айдишник таймаута или интервала, но попробовать не сломать jQuery, попробуй сузить область поиска. Так как айдишники начинаются с 1 и увеличиваются на 1, можно попробовать диагностировать, что тебе нужно очищать интвервалы и таймауты, начиная с 400 по 800 айдишники.
И помни, что адишник интервала будет разным при разных запусках программы, может зависить от машины пользователя, времени загрузки страницы, браузера, плагинов браузера, погоды и мирового эфира.
Постановка некорректная. Любой интервал или таймаут увеличат адишник. Интервалы и таймауты могут быть поставлены аналитикой, библиотеками, чужим кодом, своим кодом, плагинами, то есть любым кодом.
Я бы не советовал заморачиваться с этим трюком, а попробовать решить задачу другим образом. Все же этот трюк нужен для диагностики, а не для реализации функционала.