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, un numero intero di millisecondi dall'epoca di sistema, molto simile al valore restituito da Date.now().

A partire da Chrome 49, timeStamp è un valore DOMHighResTimeStamp. Questo valore è ancora un numero di millisecondi, ma con una risoluzione in microsecondi, il che significa che includerà un componente decimale. Inoltre, instead of the value being relative to the epoch, the value is relative to the PerformanceTiming.navigationStart, ovvero il momento in cui l'utente ha visitato la pagina.

I vantaggi di una maggiore precisione del timestamp sono evidenti in questi esempi:

Considerazioni su più browser e legacy

Se hai già un codice che confronta i valori Event.timeStamp di due eventi, non dovresti dover modificare il codice a causa del passaggio a DOMHighResTimeStamp. Inoltre, sui browser che supportano DOMHighResTimeStamp, il codice esistente trarrà vantaggio dall'aumento della precisione in microsecondi, nonché dal fatto che DOMHighResTimeStamp è garantito per essere in aumento in modo monotono, indipendentemente dal fatto che l'orologio di sistema cambi nel mezzo dell'esecuzione della pagina web.

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

In entrambi i casi, DOMTimeStamp e DOMHighResTimeStamp si comportano in modo diverso, ma puoi semplificare il codice cross-browser utilizzando questa funzione di conversione, grazie a 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.