1768 votes

Comment mesurer le temps mis par une fonction à exécuter

J’ai besoin d’obtenir des temps d’exécution en millisecondes.

2757voto

vsync Points 11280

Vous pouvez utiliser console.time:

Note:
La chaîne étant de passer à la et méthodes doivent correspondre
(pour la minuterie pour terminer comme prévu).

709voto

Owen Points 36009

utiliser Date().getTime()

La méthode getTime() retourne le nombre de millisecondes depuis minuit le 1er janvier 1970.

ex.

vous pouvez également getMilliseconds() donnera les millisecondes de l’objet Date.

473voto

Pacerier Points 15960

N’utilisez pas `` , elle est affectée par des changements dans « heure du système ». Ce qui signifie simplement nous sera get erronée résultats incorrects.

Est la meilleure façon de mesurer le temps écoulé `` .

65voto

NicJ Points 1018

Si vous avez besoin pour obtenir la fonction de temps d'exécution sur votre machine de développement, vous pouvez utiliser votre navigateur outils de profilage, ou les commandes de la console comme console.time() et console.timeEnd().

Tous les navigateurs modernes ont JavaScript profileurs intégré. Ces profileurs devrait donner la mesure la plus précise que vous n'avez pas à modifier votre code existant, ce qui pourrait affecter la fonction du temps d'exécution.

Pour le profil de votre code JavaScript:

  • Dans Chrome, appuyez sur F12 et sélectionnez les Profils onglet, puis Recueillir le JavaScript CPU Profil.
  • Dans Firefox, installer/ouvrir Firebug, et cliquez sur le Profil de bouton.
  • Dans IE 9+, appuyez sur la touche F12, cliquez sur Script ou Profiler (selon votre version d'IE).

Sinon, sur votre machine de développement, vous pouvez ajouter de l'instrumentation pour votre code avec console.time() et console.timeEnd(). Ces fonctions, pris en charge dans Firefox11+, Chrome2+ et IE11+, le rapport sur les timers, start/stop par console.time(). time() prend un définis par l'utilisateur minuterie nom comme argument, et timeEnd() ensuite des rapports sur les temps d'exécution depuis le minuteur en route:

function a() {
  console.time("mytimer");
  ... do stuff ...
  var dur = console.timeEnd("myTimer"); // NOTE: dur only works in FF
}

Notez que seul Firefox renvoie le temps écoulé dans l' timeEnd() appel. Les autres navigateurs simplement le résultat le développeur de la console: la valeur de retour de l' timeEnd() n'est pas défini.

Si vous souhaitez obtenir de l'exécution de la fonction du temps dans la nature, vous aurez pour instrument de votre code. Vous avez deux options. Vous pouvez simplement enregistrer le début et la fin des temps en interrogeant new Date().getTime():

function a() {
  var start = new Date().getTime();
  ... do stuff ...
  var end = new Date().getTime();
  var dur = end - start;
}

Cependant, l' Date objet uniquement a milliseconde et seront influencés par tout système d'exploitation du système de modifications de l'horloge. Dans les navigateurs modernes, il y a une meilleure option.

La meilleure option est d'utiliser la Haute Résolution en Temps, aka window.performance.now(). now() est mieux que les traditionnels Date.getTime() de deux manières:

  1. now() est un double avec la milliseconde résolution qui représente le nombre de millisecondes depuis le début de la page de navigation. Elle renvoie le nombre de microsecondes dans la fraction (par exemple, une valeur de 1000.123 est de 1 seconde et 123 de la microseconde).

  2. now() est de plus en plus monotone. Ceci est important car l' Date.getTime() pouvez éventuellement sauter en avant ou en même en arrière lors des appels ultérieurs. Notamment, si le système d'exploitation de l'heure du système est mis à jour (par exemple, la synchronisation de l'horloge atomique), Date.getTime() est également mis à jour. now() est garanti pour toujours être de plus en plus monotone, de sorte qu'il n'est pas affecté par le système d'exploitation du système de temps -- il sera toujours horloge murale (en supposant que votre horloge murale n'est pas atomique...).

now() peut être utilisé dans presque tous les lieux que new Date().getTime(), + new Date andt Date.now() . L'exception est qu' Date et now() temps ne se mélangent pas, comme Date est basé sur unix époque (le nombre de millisecondes écoulées depuis 1970), tandis que l' now() est le nombre de millisecondes écoulées depuis votre page de navigation commencé (de sorte qu'il sera beaucoup plus petit que Date).

Voici un exemple de comment utiliser now():

function a() {
  var start = window.performance.now();
   ... do stuff ...
  var end = window.performance.now();
  var dur = end - start;
}

now() est pris en charge dans Chrome stable, Firefox 15+, et IE10. Il y a également plusieurs polyfills disponibles.

Une autre option pour la mesure de temps d'exécution à l'état sauvage est UserTiming. UserTiming se comporte de façon similaire à l' console.time() et console.timeEnd(), mais il utilise la même Haute Résolution Horodatage now() utilise (si vous obtenez un sous-ordre de la milliseconde monotone croissante de l'horloge), et enregistre le timestamp et la durée de la PerformanceTimeline.

UserTiming a les concepts de marques (horodateurs) et des mesures (durées). Vous pouvez définir autant de soit que vous voulez, et ils sont exposés sur le PerformanceTimeline.

Pour enregistrer un timestamp, vous appelez mark(startMarkName). Pour obtenir la durée depuis votre première marque, il vous suffit d'appeler measure(measurename, startMarkname). La durée est alors enregistré dans le PerformanceTimeline à côté de vos marques.

function a() {
  window.performance.mark("start");
  ... do stuff ...
  window.performance.measure("myfunctionduration", "start");
}

// duration is window.performance.getEntriesByName("myfunctionduration", "measure")[0];

UserTiming est disponible dans IE10+ et Chrome25+. Il y a aussi un polyfill disponible (ce qui j'ai écrit).

21voto

Stefan Mai Points 9477

Utiliser Firebug, activez Javascript et Console. Cliquez sur profil. Recharger. Cliquez de nouveau sur le profil. Afficher le rapport.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X