Als milliseconden niet genoeg zijn: performance.now

De High Resolution Timer is toegevoegd door de WebPerf Working Group om metingen in het webplatform mogelijk te maken die nauwkeuriger zijn dan wat we hebben gehad met +new Date en de nieuwere Date.now() .

Ter vergelijking: hier zijn de soorten waarden die u terugkrijgt:

Date.now()         //  1337376068250
performance.now()  //  20303.427000007

U zult merken dat de twee bovenstaande waarden vele ordes van grootte verschillen. performance.now() is een meting van milliseconden met drijvende komma sinds die specifieke pagina begon te laden (de performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart) tijdstempel om specifiek te zijn). Je zou kunnen stellen dat dit het aantal milliseconden kan zijn sinds het Unix-tijdperk , maar zelden hoeft een webapp de afstand tussen nu en 1970 te kennen. Dit getal blijft relatief ten opzichte van de pagina omdat je twee of meer metingen gaat vergelijken. tegen elkaar.

Monotone tijd

Een ander bijkomend voordeel is dat u erop kunt vertrouwen dat de tijd monotoon is. Laten we WebKit-ingenieur Tony Gentilcore dit uitleggen:

Gebruiksscenario's

Er zijn een paar situaties waarin u deze timer met hoge resolutie zou gebruiken in plaats van een standaard tijdstempel te gebruiken:

  • benchmarking
  • game- of animatie runloop-code
  • framerate nauwkeurig berekenen
  • Acties of audio laten plaatsvinden op specifieke punten in een animatie of andere op tijd gebaseerde reeks

Beschikbaarheid

De timer met hoge resolutie is momenteel beschikbaar in Chrome (Stable) als window.performance.webkitNow() en deze waarde is over het algemeen gelijk aan de nieuwe argumentwaarde die wordt doorgegeven aan de requestAnimationFrame callback . Binnenkort zal WebKit zijn voorvoegsel laten vallen en dit zal beschikbaar zijn via performance.now() . Vooral de WebPerfWG, geleid door Jatinder Mann van Microsoft, is zeer succesvol geweest in het vrij snel verwijderen van de voorvoegsels van hun functies .

Samenvattend is performance.now() ...

  • een dubbel met microseconden in de fractionele
  • relatief aan het navigationStart van de pagina in plaats van aan het UNIX-tijdperk
  • niet scheef wanneer de systeemtijd verandert
  • beschikbaar in Chrome stabiel, Firefox 15+ en IE10.