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

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

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

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

Ответ 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 мс независимо от того, когда последний обратный вызов был выполнен.

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