Outro
Sei que pode ter sido uma leitura longa, mas acredito que você gostou. De qualquer forma, se você tiver alguma dúvida ou sugestão, fique à vontade para entrar em contato comigo.Obrigado por ler e adeus?","image":"http://www.luping.net/uploads/20240822/172428984466c6933405c14.gif","datePublished":"2024-08-22T09:24:04+08:00","dateModified":"2024-08-22T09:24:04+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
Eu sei que os cronômetros já são um recurso que muitas pessoas usam em suas tarefas do dia a dia. No mundo JavaScript, os temporizadores são frequentemente implementados com as funções setTimeout ou setInterval. A má notícia para você, se estiver fazendo isso, é que não é uma boa prática e tentarei explicar o porquê.
Antes de começar a explicar meu pensamento, tenho uma pergunta para você:você pode usar um relógio com a hora errada?
Se sua resposta for sim, sinto muito por ter desperdiçado seu precioso tempo porque este artigo não pertence a você.Por outro lado, se sua resposta for negativa, explicarei por que usar setTimeout ou setInterval é como usar um relógio danificado para saber as horas.
O problema com essas funções
Este comportamento se deve ao fato de setTimeout estar adicionando o callback na fila do navegador para que ele o processe quando estiver ocioso
(não tem uma tarefa a fazer) em outras palavras o callback passado para setTimeout tem baixa prioridade
Agora, sabendo disso, imagino que será difícil para você implementar timers usando a função setTimeout porque você pode ter 2 ou até 10 ticks (dependendo de quão ocupado seu navegador está) ao mesmo tempo. Será um pesadelo depurar, mas temos uma solução melhor?Uma maneira de evitar essas funções
(em outras palavras, antes de ocorrer qualquer alteração na IU)
A diferença aqui é bem sutil, então é melhor entendê-la por meio do código. Vamos retomar nosso trecho anterior e ajustá-lo um pouco para comparar setTimeout e requestAnimationFrame
(embora em alguns casos raros o inverso aconteça)
Mas se você rodar no Firefox, este será o resultadoIsso pode parecer confuso, mas se você prestar um pouco de atenção, perceberá que nenhuma pintura está acontecendo durante a execução, então a forma como esse cenário é tratado depende do navegador.
Agora, se pudermos ajustar nosso snippet para fazer o navegador redesenhar a página, vamos ver o que vai acontecer
E aqui está a saída no Firefox
Como você pode ver nos logs, quando o navegador faz alterações na IU, a função requestAnimationFrame sempre terá prioridade sobre outros retornos de chamada agendados.
Como na web estamos constantemente realizando repinturas, requestAnimationFrame é uma escolha óbvia para implementar temporizadores.
Compreendendo a função requestAnimationFrame
A função retornará um número inteiro representando o identificador da solicitação, isso pode ser útil se você deseja cancelar a solicitação com a função cancelAnimationFrame.
Uma implementação simples de um cronômetro em JavaScript
Obrigado por ler e adeus?
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3