Lorsque les millisecondes ne suffisent pas : performance.now

Le Minuteur haute résolution a été ajouté par le groupe de travail WebPerf pour permettre des mesures dans la plate-forme Web plus précises que celles obtenues avec +new Date et le plus récent 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 très différentes. performance.now() correspond à une mesure en millisecondes à virgule flottante depuis le début du chargement de cette page spécifique (l'horodatage performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart), plus précisément). On pourrait affirmer qu'il s'agit du nombre de millisecondes écoulées depuis l'époque Unix, mais une application Web a rarement besoin de connaître la distance entre le moment présent et 1970. Ce nombre reste relatif à la page, car vous allez comparer deux mesures ou plus entre elles.

Temps monotone

Autre avantage : vous pouvez compter sur la monotonie du temps. Laissez-moi vous expliquer cela par l'ingénieur WebKit Tony Gentilcore:

Cas d'utilisation

Vous pouvez utiliser ce minuteur haute résolution au lieu d'obtenir un code temporel de base dans les cas suivants:

  • analyse comparative
  • Code de boucle d'exécution de jeu ou d'animation
  • calculer le frame rate avec précision ;
  • déclencher des actions ou des éléments audio à des moments spécifiques d'une animation ou d'une autre séquence temporelle ;

Disponibilité

Le minuteur haute résolution est actuellement disponible dans Chrome (version stable) sous la forme window.performance.webkitNow(). Cette valeur est généralement égale à la nouvelle valeur d'argument transmise au rappel requestAnimationFrame. WebKit va bientôt supprimer son préfixe, et il sera disponible via performance.now(). Le groupe WebPerfWG, dirigé par Jatinder Mann de Microsoft, a réussi à supprimer le préfixe de ses fonctionnalités très rapidement.

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

  • un double avec des microsecondes dans la partie fractionnaire
  • par rapport au navigationStart de la page plutôt qu'à l'epoch UNIX.
  • ne sont pas faussées lorsque l'heure système change
  • disponible dans Chrome stable, Firefox 15 et versions ultérieures, et IE 10.