O Timer de alta resolução foi adicionado pelo Grupo de trabalho WebPerf (link em inglês) para permitir medições na plataforma Web mais precisas do que as realizadas com o +new Date
e o Date.now()
mais recente.
Só para comparar, aqui estão os tipos de valores que você receberia:
Date.now() // 1337376068250
performance.now() // 20303.427000007
Você notará que os dois valores acima têm muitas ordens de magnitude diferentes. performance.now()
é uma medida de milissegundos de ponto flutuante desde que determinada página começou a carregar (o carimbo de data/hora performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart)
para ser específico). Você poderia argumentar que esse pode ser o número de milissegundos desde o época do unix, mas raramente um app da Web precisa saber a distância entre agora e 1970. Esse número permanece relativo à página porque você estará comparando duas ou mais medições.
Horário monotônico
Outro benefício disso é que o tempo é monotônico. Vamos deixar o engenheiro do WebKit, Tony Gentilcore, explicar isso:
Casos de uso
Existem algumas situações em que você usaria esse timer de alta resolução em vez de capturar um carimbo de data/hora básico:
- comparativo de mercado
- código de loop de execução de jogo ou animação
- calcular frame rate com precisão
- que ações ou áudios sejam acionados em pontos específicos de uma animação ou outra sequência de tempo
Disponibilidade
O timer de alta resolução está disponível no Chrome (Stable) como window.performance.webkitNow()
, e esse valor geralmente é igual ao novo valor do argumento transmitido ao callback do requestAnimationFrame. Em breve, o WebKit vai remover o prefixo, que estará disponível pelo performance.now()
. Em particular, o WebPerfWG, liderado por Jatinder Mann, da Microsoft, teve muito sucesso ao remover a prefixo dos recursos rapidamente.
Resumindo, performance.now()
é...
- um duplo com microssegundos na fórmula
- relativo ao
navigationStart
da página e não à época do UNIX - não distorcidas quando o horário do sistema mudar
- disponível no Chrome Stable, Firefox 15+ e IE10.