⏱️ Cronômetro Online com Voltas
Pressione Iniciar e a ferramenta não adiciona literalmente pequenos pedaços de tempo em intervalos de trinta milissegundos. Ela registra a leitura exata de performance.now() no exato momento em que você inicia, e em cada redesenho, subtrai esse número armazenado do atual para obter o tempo decorrido — recalculado de forma fresca, não acumulado. Essa distinção importa porque os navegadores deliberadamente desaceleram o setInterval em guias em segundo plano para economizar bateria, o que é o método clássico de temporizadores caseiros desviarem-se ou perderem segundos. Como esse cronômetro sempre deriva seu número de uma diferença de timestamps em vez de contar quantos ticks realmente dispararam, o tempo exibido volta imediatamente ao valor correto no momento em que você retorna ao guia, mesmo após minutos longe.
O cronômetro é um temporizador de volta de navegador gratuito que rastreia o tempo decorrido comparando o relógio monotônico performance.now() contra um timestamp de início armazenado, em vez de contar os ticks do setInterval, então o número exibido permanece preciso mesmo quando o navegador reduz as atualizações da tela do guia.
Privado por design. Esta ferramenta funciona inteiramente no seu navegador — nada do que você digita é enviado ou armazenado, e funciona offline.
Sobre
Abaixo do capô, há três partes de estado: um valor acumulado `elapsed` em milissegundos, um `startAt` snapshot de `performance.now()` tomado no momento em que você pressiona Iniciar, e um sinalizador booleano `running`. A função que produz o número na tela é simplesmente o tempo decorrido mais, se estiver rodando, a diferença entre agora e startAt. Um `setInterval` chama essa função a cada 30 milissegundos apenas para repintar a exibição — o próprio intervalo não carrega nenhuma informação de tempo, apenas um gatilho de atualização. Essa é a maneira correta de construir um cronômetro, e evita diretamente o bug comum em que um temporizador adiciona um incremento fixo em cada tick e lentamente se desvia uma vez que os ticks são atrasados, pulados ou coalescidos.
Essa escolha de design também é o que acontece quando você muda para outro guia. Os navegadores reduzem os temporizadores de guias em segundo plano para economizar CPU e bateria — um `setInterval` configurado para cada 30ms pode ser atrasado para uma vez por segundo ou mais lento enquanto o guia não está visível. Nesse cronômetro, isso afeta apenas com que frequência o número na tela é repintado; a matemática subjacente (timestamp atual menos timestamp de início, mais o que já foi acumulado) não se importa com quantas repinturas foram puladas. Volte ao guia e a próxima repintura mostra exatamente o tempo decorrido correto — nada é perdido ou ganho com a redução, apenas a suavidade de assistir os segundos passarem enquanto você estava olhando para algo diferente.
Usar `performance.now()` em vez de `Date.now()` também é a primitiva correta para esse trabalho, e não um detalhe acidental. `Date.now()` reflete o relógio de parede do seu sistema, e os relógios de parede podem pular — um laptop acordando do sono e resincronizando com um servidor NTP, uma mudança manual do relógio ou um ajuste de horário de verão podem fazer `Date.now()` pular para frente ou até para trás no meio da sessão. `performance.now()` é definido como um relógio monotônico: ele só conta para cima a uma taxa constante e não é afetado por essas correções, o que é exatamente a garantia que um cronômetro precisa e um temporizador simples de relógio de parede não tem.
A limitação honesta é a persistência, e não há nenhuma. Essa construção mantém `elapsed` e o array `laps` como variáveis JavaScript comuns na memória da página — não há nenhuma chamada em lugar algum do código-fonte para localStorage ou para o próprio `Playground.store()` do site que outras ferramentas Toolio usam para sobreviver a uma recarregamento. Isso significa que recarregar a página, fechar o guia ou clicar para outro ferramenta apaga seu tempo em execução e cada lap registrado instantaneamente e permanentemente. Não há "continuar a última sessão", nada sincroniza entre dispositivos, e nada para backup, porque nada é escrito em armazenamento desde o início. Se uma história de laps realmente importar para você — um registro de treino, um conjunto de tempos de apresentação — copie os números ou tire uma captura de tela antes de navegar para longe, porque essa página não lembrará deles para você.
Como usar
- Clique em "Iniciar" — o botão imediatamente muda seu rótulo para "Pausar" e o relógio na tela começa a subir em tempo real, repintando a cada 30 milissegundos.
- Clique em "Lap" a qualquer momento enquanto estiver em execução para capturar o tempo decorrido atual; a nova entrada é fixada no topo da lista de laps e mostra tanto o split (tempo desde o lap anterior) quanto o total acumulado.
- Clique no mesmo botão novamente, agora rotulado "Pausar", para congelar a exibição — o tempo decorrido é mantido internamente, nada é perdido, e o botão volta para "Iniciar".
- Clique novamente em "Iniciar" para retomar o tempo a partir do exato ponto em que você parou, e não a partir de zero.
- Clique em "Reset" para zerar a exibição, limpar todos os laps registrados e restaurar ambos os botões para seus rótulos iniciais — este também é o único jeito de iniciar uma nova sessão, já que não há recurso de salvamento para proteger a antiga primeiro.
Perguntas frequentes
- Como este cronômetro realmente mede o tempo sob o capô?
- Ele lê `performance.now()` uma vez, no exato momento em que você pressiona Iniciar, e armazena esse número. A partir daí, o valor na tela é simplesmente "tempo já acumulado" mais "performance.now() atual menos o timestamp de início armazenado" — recalculado de forma fresca a cada 30ms de repintura. Ele nunca simplesmente adiciona um +30ms fixo a um total em execução em cada tick, o que é o atalho que faz muitos temporizadores caseiros se desviarem lentamente do sincronismo.
- O que acontece com o tempo se eu mudar para outro guia do navegador enquanto ele está em execução?
- Guia em segundo plano são reduzidos — o navegador pode atrasar um `setInterval` de 30ms para uma vez por segundo ou mais lento para economizar CPU e bateria, então o número na tela pode parecer congelado ou pular enquanto você está longe. Mas, como este cronômetro sempre calcula o tempo decorrido como uma diferença de timestamp em vez de contar quantos ticks dispararam, voltar ao guia faz com que a próxima repintura mostre exatamente o tempo decorrido correto. Você não perde ou ganha tempo com a redução — apenas a suavidade visual sofre enquanto você não está olhando.
- Por que performance.now() em vez de Date.now() — isso realmente importa?
- Sim. `Date.now()` reflete o relógio de parede do seu sistema, que pode pular para frente ou para trás — por exemplo, logo após um laptop acordar do sono e resincronizar com um servidor NTP, ou se o relógio do sistema for alterado manualmente. `performance.now()` é um relógio monotônico que só aumenta a uma taxa constante e é imune a essas correções, o que é exatamente a propriedade que um cronômetro precisa e esta construção usa a correta para isso.
- Ele salva meu tempo decorrido ou histórico de laps em algum lugar?
- Não — e, ao contrário de outras ferramentas Toolio, ele não usa o localStorage do navegador para nenhum desses dados. Tudo que você vê existe apenas na memória da página enquanto este guia específico estiver aberto. Recarregue a página, feche o guia ou navegue para outra ferramenta, e seu tempo decorrido e todos os laps desaparecem para sempre; não há desfazer e não há salvamento automático, porque nada é escrito em armazenamento desde o início. Copie os números ou tire uma captura de tela antes de sair se você precisar de um registro.
- Há um limite para laps, e o que significam os dois números em cada linha de lap?
- Não há limite — a lista simplesmente cresce, com o novo lap fixado no topo. Cada linha mostra dois números: o split, na cor de destaque, que é o tempo decorrido desde o lap anterior; e o total, em cinza, que é o tempo acumulado desde que você pressionou Iniciar. Essa combinação permite que você avalie um segmento individual — um intervalo de treino, uma seção de uma palestra — sem perder o rastro do tempo total.
- Esta ferramenta envia meus dados?
- Não. Tudo é executado no seu navegador, então seus dados nunca saem do seu dispositivo — e funciona até offline depois que a página carrega.