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

A propriedade timeStamp da interface Event indica o momento em que um evento ocorreu.

Nas versões do Chrome anteriores à 49, esse valor timeStamp era representado como um DOMTimeStamp, que era um número inteiro de milissegundos desde a época do sistema, semelhante ao 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 de microssegundos, o que significa que o valor vai incluir um componente decimal. Além disso, em vez de o valor ser relativo à época, ele é relativo ao PerformanceTiming.navigationStart, ou seja, o momento em que o usuário navegou até a página.

Confira abaixo os benefícios de uma precisão maior do carimbo de data/hora:

Considerações sobre navegadores diferentes e legados

Se você tiver um código que compara valores de Event.timeStamp de dois eventos, não será necessário ajustar o código devido à mudança para DOMHighResTimeStamp. Além disso, em navegadores que oferecem suporte a DOMHighResTimeStamp, o código atual se beneficia da maior precisão em microssegundos, além do fato de que o DOMHighResTimeStamp tem garantia de aumento monotonicamente, independente de o relógio do sistema mudar no meio da execução da página da Web.

Se, em vez de comparar dois valores de Event.timeStamp, o código precisa determinar há quanto tempo um evento ocorreu, o novo valor de DOMHighResTimeStamp pode ser comparado diretamente com performance.now(). Se você precisar transformar Event.timeStamp em um número absoluto de milissegundos desde a época do sistema, adicione um DOMHighResTimeStamp a performance.timing.navigationStart.

Em ambos os casos, DOMTimeStamp e DOMHighResTimeStamp se comportam de maneira diferente, mas você pode simplificar seu código entre navegadores usando essa função de conversão, por cortesia de Majid Valipour. Ela recebe um objeto Event como parâmetro e retorna um valor semelhante a DOMHighResTimeStamp, pronto para ser comparado a performance.now() ou adicionado a performance.timing.navigationStart.