Optimisation de la répétition d'opérations lourdes en JavaScript
Dans la leçon précédente, les appels répétés de fonctions prenaient en réalité très peu de temps et notre optimisation n'économisait pas beaucoup. Cependant, les choses seraient bien pires si nous devions effectuer plusieurs fois l'appel d'une fonction "lourde" qui prend un temps d'exécution assez long.
Supposons, par exemple, que nous ayons une fonction qui trouve les diviseurs d'un nombre :
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Il est évident que cette fonction est assez "lourde". Il serait donc une mauvaise idée d'écrire un code comme celui-ci :
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Il serait bien mieux, bien sûr, d'effectuer l'opération "lourde" une seule fois et de stocker le résultat dans une variable, puis d'utiliser cette variable aux endroits nécessaires :
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Optimisez le code ci-dessous :
let num = 1233456789;
if (getSumSquare(num) >= 10 && getSumSquare(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
function getSumSquare(num) {
let digits = String(num).split('');
let sum = 0;
for (let digit of digits) {
sum += digit ** 2;
}
return sum;
}