O timer de alta resolução foi adicionado pelo WebPerf Working Group para permitir medições na plataforma da Web mais precisas do que as que tínhamos com +new Date
e o Date.now()
mais recente.
Para comparar, confira os tipos de valores que você vai receber:
Date.now() // 1337376068250
performance.now() // 20303.427000007
Os dois valores acima são muito diferentes. performance.now()
é uma medição de milissegundos de ponto flutuante desde que a página começou a ser carregada (o carimbo de data/hora performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart)
para ser específico). Poderia ser o número de milissegundos desde a Era Unix, mas raramente um app da Web precisa saber a distância entre o presente e 1970. Esse número permanece relativo à página porque você vai comparar duas ou mais medições entre si.
Tempo monótono
Outro benefício adicional é que você pode confiar que o tempo é monótono. Vamos deixar o engenheiro do WebKit Tony Gentilcore explicar isso:
Casos de uso
Há algumas situações em que você usaria esse timer de alta resolução em vez de extrair um carimbo de data/hora básico:
- comparativo de mercado
- código de runloop de jogo ou animação
- calcular a taxa de quadros com precisão
- definir ações ou áudios para ocorrer em pontos específicos de uma animação ou outra sequência baseada em 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 para o callback requestAnimationFrame. Em breve, o WebKit vai remover o prefixo, e ele vai estar disponível em performance.now()
. O WebPerfWG, em particular, liderado por Jatinder Mann da Microsoft, teve muito sucesso em remover o prefixo dos recursos rapidamente.
Em resumo, performance.now()
é...
- um número duplo com microssegundos no fracionário
- em relação ao
navigationStart
da página, e não à época UNIX - não são distorcidas quando a hora do sistema muda
- disponível no Chrome estável, Firefox 15+ e IE10.