Il timer ad alta risoluzione è stato aggiunto dal gruppo di lavoro WebPerf per consentire una misurazione nella piattaforma web più precisa di quella che avevamo con +new Date
e il più recente Date.now()
.
Per fare un confronto, ecco i tipi di valori che otterresti:
Date.now() // 1337376068250
performance.now() // 20303.427000007
Noterai che i due valori riportati sopra sono diversi di molti ordini di grandezza. performance.now()
è una misura in millisecondi con virgola mobile dal momento in cui è iniziato il caricamento della pagina specifica (in particolare, il timestamp performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart)
). Potresti sostenere che potrebbe essere il numero di millisecondi dall'epoca Unix, ma raramente un'app web ha bisogno di conoscere la distanza tra il momento attuale e il 1970. Questo numero rimane relativo alla pagina perché dovrai confrontare due o più misurazioni tra loro.
Tempo monotono
Un altro vantaggio è che puoi fare affidamento sul fatto che il tempo sia monotono. Lasciamo che sia Tony Gentilcore, ingegnere di WebKit, a spiegarcelo:
Casi d'uso
Esistono alcune situazioni in cui è consigliabile utilizzare questo timer ad alta risoluzione anziché acquisire un timestamp di base:
- benchmarking
- codice del ciclo di lavoro di un gioco o di un'animazione
- Calcolo della frequenza fotogrammi con precisione
- cueing di azioni o audio in punti specifici di un'animazione o di un'altra sequenza basata sul tempo
Disponibilità
Il timer ad alta risoluzione è attualmente disponibile in Chrome (versione stabile) come window.performance.webkitNow()
e questo valore è generalmente uguale al nuovo valore dell'argomento passato al callback requestAnimationFrame. A breve, WebKit non avrà più il prefisso e sarà disponibile tramite performance.now()
. In particolare, il WebPerfWG, guidato da Jatinder Mann di Microsoft, ha risolto molto rapidamente il problema del prefisso delle funzionalità.
In sintesi, performance.now()
è…
- un doppio con microsecondi nella parte frazionaria
- rispetto al
navigationStart
della pagina anziché all'epoca UNIX - non sono distorte quando cambia l'ora di sistema
- disponibile in Chrome stabile, Firefox 15 e versioni successive ed IE10.