Lorsque les millisecondes ne suffisent pas : performance.now

Le minuteur haute résolution a été ajouté par le groupe de travail WebPerf pour permettre sur la plate-forme Web d'effectuer des mesures plus précises que celles obtenues avec +new Date et la nouvelle version Date.now().

À titre de comparaison, voici les types de valeurs que vous obtiendrez:

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

Vous remarquerez que les deux valeurs ci-dessus sont différentes de plusieurs ordres de grandeur. performance.now() est une mesure du nombre de millisecondes à virgule flottante depuis le début du chargement de cette page (timeStamp performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart), pour plus de précision). On pourrait affirmer que cela peut être le nombre de millisecondes écoulées depuis l'epoch Unix, mais il est rare qu'une application Web ait besoin de connaître la distance entre aujourd'hui et 1970. Ce nombre reste relatif à la page, car vous allez comparer deux mesures ou plus.

Temps monotone

Autre avantage : le temps est monotone. Laissons tony Gentilcore, ingénieur WebKit, expliquer celui-ci:

Cas d'utilisation

Dans certains cas, vous pouvez utiliser ce minuteur haute résolution au lieu de récupérer un code temporel de base:

  • analyse comparative
  • code runloop de jeu ou d'animation
  • calculer la fréquence d'images avec précision ;
  • signaler des actions ou du contenu audio à des moments spécifiques d'une animation ou d'une autre séquence temporelle ;

Garantie de disponibilité

Le minuteur haute résolution est actuellement disponible dans Chrome (Stable) en tant que window.performance.webkitNow(). Cette valeur est généralement égale à la nouvelle valeur d'argument transmise au rappel requestAnimationFrame. Bientôt, WebKit supprimera son préfixe et sera disponible jusqu'au performance.now(). WebPerfWG, en particulier, dirigé par Jatinder Mann de Microsoft, a réussi à supprimer rapidement ses fonctionnalités..

En résumé, performance.now() est...

  • un double avec des microsecondes dans la fraction
  • par rapport au navigationStart de la page plutôt qu'à l'époque UNIX
  • ne sont pas biaisées lorsque l'heure du système change
  • disponible dans la version stable de Chrome, Firefox 15 ou version ultérieure, et Internet Explorer 10.