A propriedade timeStamp
da interface Event
indica a hora em que um determinado evento ocorreu.
Nas versões do Chrome anteriores à 49, esse valor de timeStamp
era
representado como um DOMTimeStamp
,
que era um número inteiro de milissegundos desde a
época do sistema,
assim como o valor retornado por
Date.now()
.
A partir do Chrome 49, timeStamp
é um
valor
DOMHighResTimeStamp
. Esse valor ainda é um número de milissegundos, mas com resolução em microssegundos, o que significa que o valor incluirá um componente decimal. Além disso,
em vez de o valor ser relativo à época, o valor é relativo a
PerformanceTiming.navigationStart
,
ou seja, o momento em que o usuário navegou até a página.
Os benefícios da precisão adicional do carimbo de data/hora podem ser vistos nestes exemplos:
Considerações legadas e entre navegadores
Se você tiver um código que compara valores Event.timeStamp
de
dois eventos, não vai ser necessário ajustar o código por conta da mudança para
DOMHighResTimeStamp
. Além disso, em navegadores compatíveis com
DOMHighResTimeStamp
, o código existente se beneficia do aumento da
precisão de microssegundos, além do fato de que o
DOMHighResTimeStamp
tem a garantia de
aumentar monotonicamente,
independente de o relógio do sistema mudar no meio da execução da
sua página da Web.
Se, em vez de comparar dois valores de Event.timeStamp
, seu código
precisar determinar há quanto tempo um evento ocorreu, o novo
valor de DOMHighResTimeStamp
poderá ser comparado diretamente a
performance.now()
.
Se você precisar transformar Event.timeStamp
em um número absoluto
de milissegundos desde a época do sistema, poderá conseguir esse valor adicionando um
DOMHighResTimeStamp
ao performance.timing.navigationStart
.
Em ambos os casos, DOMTimeStamp
e DOMHighResTimeStamp
se comportam de maneira diferente, mas é possível simplificar o código entre navegadores usando esta
função de conversão,
cortesia da Majid Valipour. Ele usa um objeto
Event
como parâmetro e retorna um
valor semelhante a DOMHighResTimeStamp
, pronto para ser comparado com
performance.now()
ou adicionado a
performance.timing.navigationStart
.