setInterval и длительные функции

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

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

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

13
задан Allain Lalonde 29 December 2009 в 19:24
поделиться

1 ответ

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

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

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

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

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

17
ответ дан 1 December 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: