Carimbos de data/hora de alta resolução para eventos

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.