J’ai besoin d’obtenir des temps d’exécution en millisecondes.
Réponses
Trop de publicités?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).
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.
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:
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).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).