Question

Je teste rapidement certains programmes JavaScript en créant un objet Date et en l'utilisant pour obtenir l'heure en millisecondes avant et après le travail réel de la fonction. J'ai fait du corps un simple ajout de boucle, puis la fin soustrait l'ancienne ms de la nouvelle ms et l'affiche. Cependant, tout se termine dans 0 milliseconde ... ce qui est logique, car le moment où je le vérifie avec une écriture est identique avant et après le travail. Est-ce que je le fais bien, et JavaScript (dans Chrome) est ultra-rapide, ou existe-t-il des éléments cachés qui gâchent mes variables?

Était-ce utile?

La solution

Alors que l'objet Date renvoie les heures en millisecondes, il ne s'agit pas en réalité de la résolution du minuteur qui le suit. Par exemple, le minuteur peut se déclencher une fois toutes les 10 ms. Si votre processus ne prend que 3 ms, la plupart du temps, vous ne verrez pas une mesure différente de zéro (et parfois 10 ms).

La solution consiste à exécuter votre fonction plusieurs fois et à chronométrer le tout. Par exemple, exécutez-le un million de fois et divisez le temps total par 1000000 pour obtenir le temps moyen d'une exécution.

Autres conseils

Voir mon réponse à cette question pour savoir comment mettre en œuvre des comparaisons simples de points de repère. Comme @Greg Hewgill l'a souligné, il est important d'exécuter le test plusieurs fois pour obtenir une représentation précise de la durée réelle d'un test spécifique.

Généralement, cela se résume à quelque chose d'aussi simple que:

var MAX = 100000, i =  0, 
    s   = null,   e = null;

console.info("`someMethodToTest()` over %d iterations", MAX);
s = new Date();
do {
    someMethodToTest();
} while ( ++i < MAX );
e = new Date();

console.log("Total: %dms; average: %dms", +e - +s, (+e - +s) / MAX);

Nous aurions vraiment besoin de voir votre code. Quoi qu'il en soit, une des raisons possibles du zéro est que votre boucle s'exécute de manière asynchrone: l'interpréteur n'attend pas la fin de la boucle avant de vous sauter à l'instruction suivante. Ou bien sûr, votre boucle peut être rapide comme l'éclair.

BTW, l’utilisation d’un profileur JavaScript pourrait vous intéresser. Firebug pour Firefox en propose un bon. Vous devez simplement ouvrir la console et cliquer sur Profil .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top