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, muito 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 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.

Os benefícios da precisão adicional dos carimbos de data/hora podem ser vistos nestes exemplos:

Considerações sobre vários navegadores e versões legadas

Se você já tem um código que compara valores de Event.timeStamp de dois eventos, não precisa ajustá-lo em conta da mudança para DOMHighResTimeStamp. Além disso, em navegadores compatíveis com DOMHighResTimeStamp, seu código atual se beneficia da maior precisão de microssegundos, bem como do fato de que o DOMHighResTimeStamp aumenta monotonicamente, independentemente das mudanças no relógio do sistema no meio da execução da 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 com 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 a performance.timing.navigationStart.

Nesses dois casos, DOMTimeStamp e DOMHighResTimeStamp se comportam de maneira diferente, mas você pode simplificar o código entre navegadores usando esta função de conversão, cortesia de Majid Valipour. Ela usa 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.