Que la valeur de longueur doive être mise en cache dans la boucle for, je pense que de nombreux programmeurs ont eu du mal à résoudre ce problème. Veuillez voir ci-dessous pour l'analyse de ce problème :
Dans l'optimisation des performances JS, il existe une petite optimisation courante, qui est
// 不缓存 for (var i = 0; i < arr.length; i++) { ... } // 缓存 var len = arr.length; for (var i = 0; i < len; i++) { ... }
Alors, faut-il abandonner cette façon d'écrire ? Non, il existe une autre situation où cette façon d'écrire doit être utilisée.
Veuillez consulter l'exemple :
Le code ci-dessus provoquera une boucle infinie : la première ligne de code obtiendra la liste de nœuds de tous les éléments div. Puisque la liste de nœuds est dynamique, tant qu'un nouveau div est ajouté à la page, la boucle for suivante sera mise à jour. les divs à nouveau.length est évalué, donc i et divs.length seront incrémentés en même temps à chaque fois, leurs valeurs ne seront jamais égales, créant une boucle infinie.
Donc, si vous souhaitez parcourir une liste de nœuds, il est préférable d'initialiser la deuxième variable en utilisant l'attribut length, puis de comparer l'itérateur avec la variable. Le code modifié est le suivant :
Dans cet exemple, len est initialisé. Puisque len stocke un instantané de divs.length au début de la boucle, cela évitera le problème de boucle infinie qui s'est produit dans l'exemple précédent, par conséquent, lorsqu'il est nécessaire d'itérer la boucle. nodelist, Il est plus sûr d'utiliser cette méthode.
Résumé :
1. La question de savoir si la mise en cache de la valeur de longueur est bénéfique pour l'optimisation des performances doit être jugée en fonction de la situation spécifique. De manière générale, réduire l'accès au DOM est toujours bénéfique
;
2. Lorsque vous devez utiliser nodelist, il est recommandé de mettre en cache la valeur de longueur pour éviter une boucle infinie.
Le contenu ci-dessus est une introduction complète pour savoir si la valeur de longueur doit être mise en cache dans la boucle for. J'espère qu'il vous plaira.