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
.