Pergunta

Como o SetInterval lida funções de retorno de chamada que levam mais tempo do que o intervalo desejado?

Eu li que o retorno de chamada pode receber o número de milissegundos atrasado como seu primeiro argumento, mas não consegui descobrir por que seria tarde (jitter ou funções de longa duração).

E o maravilhoso acompanhamento, isso se comporta de maneira diferente para os navegadores comuns?

Foi útil?

Solução

Deixe -me citar um excelente artigo Sobre os temporizadores de John Resig:

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

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

Essas duas peças de código podem parecer funcionalmente equivalentes, à primeira vista, mas não são. Notavelmente, o código Settimeout sempre terá pelo menos um atraso de 10ms após a execução anterior de retorno de chamada (pode acabar sendo mais, mas nunca menos), enquanto o setInterval tentará executar um retorno de chamada a cada 10ms, independentemente de quando o último retorno de chamada foi executado.

Os intervalos podem ser executados consecutivos, sem atraso, se demorarem o suficiente para executar (mais tempo que o atraso especificado).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top