Maison > Article > interface Web > js optimise les boucles trop souvent en tenant compte des problèmes de performances
Supposons que vous souhaitiez générer 10 millions de nombres aléatoires. L'approche conventionnelle est la suivante :
var numbers = []; for (var i = 0; i < 10000000; i++) { numbers.push(Math.random()); }
Cependant, lors de l'exécution de ce code sous IE, une fenêtre apparaît invitant l'utilisateur à arrêter ce script. . Lorsque cela se produit, la première chose qui vient à l’esprit est d’optimiser le corps de la boucle. Mais évidemment, le corps de la boucle est très simple et il n’y a aucune place à l’optimisation. Même si le corps de la boucle est effacé, l'invite existe toujours. Je suis donc arrivé à une conclusion : sous IE, une fois que le nombre de boucles dépasse une certaine valeur, une invite pour arrêter le script apparaîtra.
La cause a été trouvée, comment la résoudre ? Ma première pensée a été de diviser les 10 millions de boucles en plusieurs boucles plus petites. Par exemple, divisez-le en cent fois, et exécutez cent mille boucles à chaque fois :
for (var i = 0, j; i < 100; i++) { for (j = 0; j < 100000; j++) { ...... } }
IE n'est pas aussi stupide qu'on le pense, il sait que le nombre total de boucles est quand même de dix millions. Ces cent mille cycles doivent donc être exécutés séparément. Bien que Javascript soit monothread, il peut également simuler le multithreading via setTimeout ou setInterval. L'ensemble du code est optimisé comme suit :
var numbers = []; function begin() { for (var i = 0; i < 100000; i++) { numbers.push(Math.random()); } if (numbers.length < 10000000) { // 是否已完成 setTimeout(begin, 0); } else { alert("complete"); } } begin();
Plus de boucles d'optimisation js avec trop de fois. Compte tenu des problèmes de performances, veuillez faire attention au site Web PHP chinois pour les articles connexes !