Вопрос

Как setInterval обрабатывает функции обратного вызова, которые занимают больше времени, чем желаемый интервал?

Я читал, что обратный вызов может получать количество миллисекунд с опозданием в качестве своего первого аргумента, но я не смог найти причину задержки (дрожание или долго выполняющиеся функции).

И замечательное продолжение, ведет ли оно себя по-другому в обычных браузерах?

Это было полезно?

Решение

Позвольте мне процитировать превосходную Статья о таймерах Джона Ресига:

setTimeout(function(){
  /* Some long block of code... */
  setTimeout(arguments.callee, 10);
}, 10);

setInterval(function(){
  /* Some long block of code... */
}, 10);

Эти два фрагмента кода могут показаться на первый взгляд функционально эквивалентными , но это не так.Примечательно, что код setTimeout всегда будет иметь задержку не менее 10 мс после предыдущего выполнения обратного вызова (в конечном итоге это может оказаться больше, но никогда не меньше), тогда как setInterval будет пытаться выполнять обратный вызов каждые 10 мс независимо от того, когда был выполнен последний обратный вызов .

Интервалы могут выполняться последовательно без задержки, если их выполнение занимает достаточно много времени (больше указанной задержки).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top