Introduction
Dans ce laboratoire, nous allons explorer et pratiquer la manière d'écrire une fonction performante qui renvoie l'index de la fonction s'exécutant le plus rapidement à partir d'un tableau de fonctions. Le laboratoire se concentre sur l'utilisation de performance.now() et de Array.prototype.map() pour mesurer précisément le temps d'exécution des fonctions et les comparer. À la fin du laboratoire, vous aurez une meilleure compréhension de la manière d'optimiser votre code pour obtenir les meilleures performances.
Comment trouver la fonction la plus performante en JavaScript
Pour trouver la fonction la plus performante en JavaScript, suivez ces étapes :
- Ouvrez le Terminal/SSH et tapez
nodepour commencer à pratiquer le codage. - Utilisez
Array.prototype.map()pour générer un tableau où chaque valeur est le temps total pris pour exécuter la fonction aprèsiterationsfois. - Utilisez la différence entre les valeurs de
performance.now()avant et après pour obtenir le temps total en millisecondes avec un haut degré de précision. - Utilisez
Math.min()pour trouver le temps d'exécution minimum et renvoyer l'index de ce temps le plus court qui correspond à l'index de la fonction la plus performante. - Si vous omettez le second argument,
iterations, la fonction utilisera une valeur par défaut de10000itérations. - Gardez à l'esprit que plus vous utilisez d'itérations, plus le résultat sera fiable, mais plus cela prendra de temps.
Voici un extrait de code d'exemple :
const mostPerformant = (fns, iterations = 10000) => {
const times = fns.map((fn) => {
const before = performance.now();
for (let i = 0; i < iterations; i++) fn();
return performance.now() - before;
});
return times.indexOf(Math.min(...times));
};
Pour utiliser cette fonction, passez un tableau de fonctions en tant que premier argument et le nombre d'itérations en tant que second argument (optionnel). Par exemple :
mostPerformant([
() => {
// Parcourt le tableau entier avant de renvoyer `false`
[1, 2, 3, 4, 5, 6, 7, 8, 9, "10"].every((el) => typeof el === "number");
},
() => {
// N'a besoin que d'atteindre l'index `1` avant de renvoyer `false`
[1, "2", 3, 4, 5, 6, 7, 8, 9, 10].every((el) => typeof el === "number");
}
]); // 1
Sommaire
Félicitations ! Vous avez terminé le laboratoire sur la fonction la plus performante. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.