Timestamp ad alta risoluzione per gli eventi

La proprietà timeStamp dell'interfaccia Event indica l'ora in cui si è verificato un determinato evento.

Nelle versioni di Chrome precedenti alla 49, questo valore timeStamp era rappresentato come DOMTimeStamp, ovvero un numero intero di millisecondi dall'epoca del sistema, proprio come il valore restituito da Date.now().

A partire da Chrome 49, timeStamp è un valore DOMHighResTimeStamp. Questo valore è comunque un numero di millisecondi, ma con risoluzione in microsecondi, il che significa che il valore includerà un componente decimale. Inoltre, invece di essere relativo all'epoca, il valore è relativo a PerformanceTiming.navigationStart, ovvero il momento in cui l'utente ha raggiunto la pagina.

I vantaggi di una maggiore precisione del timestamp sono i seguenti:

Considerazioni sui vari browser e sulle versioni precedenti

Se disponi di codice che confronta i valori Event.timeStamp di due eventi, non dovresti modificare il codice a causa del passaggio a DOMHighResTimeStamp. Inoltre, nei browser che supportano DOMHighResTimeStamp, il codice esistente trarrà vantaggio dalla maggiore accuratezza in microsecondi e dal fatto che DOMHighResTimeStamp aumenterà in modo monotonico, indipendentemente dal fatto che l'orologio di sistema cambi durante l'esecuzione della pagina web.

Se, invece di confrontare due valori Event.timeStamp, il tuo codice deve determinare quanto tempo fa si è verificato un evento, il nuovo valore DOMHighResTimeStamp può essere confrontato direttamente con performance.now(). E se devi trasformare Event.timeStamp in un numero assoluto di millisecondi dall'epoca del sistema, puoi ottenere quel valore aggiungendo DOMHighResTimeStamp a performance.timing.navigationStart.

In entrambi i casi, DOMTimeStamp e DOMHighResTimeStamp si comportano in modo diverso, ma è possibile semplificare il codice tra browser utilizzando questa funzione di conversione, per gentile concessione di Majid Valipour. Prende un oggetto Event come parametro e restituisce un valore simile a DOMHighResTimeStamp, pronto per essere confrontato con performance.now() o aggiunto a performance.timing.navigationStart.