dans un élément d'exemple de code que j'ai écrit et je pensais que je pouvais remplacer cela avec p> maintenant après avoir lu les faits suivants p> question: strong> Quand dois-je privilégier la QSA sur les méthodes normales? p> Il est clair que si vous faites Il est également clair que Question: fort> mais est En plus de côté, il y a aussi ces choses appelées J'ai posé une question sur < HREF = "https://stackoverflow.com/questions/7941288/When-To-Utilisateur-nodeiterator"> QSA vs Nodéiterator P> p> var s comme = document.Quiseryselectorall ("A .False "); code> p>
qsa code> au lieu de document.queryselectorallall code> parce que je suis paresseux. li>
ul> QSA ("A") code> ou qsa (". Classe") code> ou QSA ("# ID") code> Vous faites de mal parce qu'il existe des méthodes (byTagname, bycassname, de byID) qui sont meilleurs . p> QSA ("div> p.magic") code> est un cas d'utilisation raisonnable. P> qsa ("tagname.class") code> une bonne utilisation-cas de QSA? p> Nodeiterator code> p>
3 Réponses :
Si le support du navigateur n'était pas un problème, je voudrais simplement l'utiliser partout. Pourquoi utiliser 4 méthodes différentes (... de parid, ... byTagname, ... byclassname) Si vous pouviez simplement utiliser un. P>
QSA semble être plus lent (... de byid ), mais ne prend toujours que quelques miliques ou moins. La plupart des temps, vous n'appelez que quelques fois, donc pas un problème. Lorsque vous frappez un goulot d'étranglement de vitesse, vous pouvez toujours remplacer QSA avec l'autre approprié. P>
En ralentissant, vous voulez dire environ deux cents fois plus lentement. Je sais déjà pour des sélecteurs simples QSA est stupide (comme mentionné)
@Raynos Vous ne devriez pas simplement regarder les vitesses les unes par rapport à l'autre. Vous devriez regarder combien de millisecondes reçoivent un appel. Ainsi, où getElementyid prend 0.0001ms dans FX7, QSA prend 0,02 ms. Sauf si vous devez sélectionner des milliers d'éléments, l'utilisateur final ne remarquera aucune différence.
WOH! Les millisecondes comptent! 0,02ms est lent. C'est une 12 secondes de 20 minutes. Au plus, je veux faire 100 micro secondes de calcul.
Pourquoi 100 micro secondes. Les humains ne peuvent détecter que 200ms au mieux. Vous pouvez donc faire beaucoup de JS et permettre au moteur de redessiner la page à 200ms.
Cela dépend entièrement de ce que vous faites. Si tout ce que vous avez à faire est de joindre une logique de base à une page autrement statique, un couple d'appels à QSA est tout à fait bien et vous évitera du temps de développement. Si vous travaillez avec des milliers d'éléments DOM et une certaine logique complexe, vous devez regarder la performance. Je ne dirais pas que l'un ou l'autre est "stupide", cela dépend simplement de ce dont vous avez besoin.
J'ai mis en place des tests pour vous gâcher. Il semble que QSA soit beaucoup plus lent. Mais si vous n'appelez pas cela beaucoup, cela ne devrait pas être un problème. P>
Edit - Version JSPERF P>
S'il vous plaît utiliser jsperf.com pour ce type de test.
Désolé, vous allez ici: http://jsperf.com/qsa-vs-regular-js < / a>
Vous devez utiliser QSA lorsque le GEBI, GEBN, GEBCN ne fonctionne pas car votre sélecteur est complexe. P>
QSA vs DOM analyse est une question de préférence et de ce que vous allez faire avec le jeu de données retourné. P>
En terminant Nodéterrader est vraiment lent
Eh bien, je dirais que jusqu'à ce que
getelementsbytagnameandandClassName () code> devient disponible,queryselectorall ("a.false") code> a un sens et est plus lisible qu'un appel en chaîne detoarray () code> àfiltre () code>.@ Frédéricamidi Un appel supplémentaire à
.Filter code> est aussi lent comme l'enfer.En effet, et, jusqu'à ce qu'un hypothétique
getelementsbytagnameandandclassname () code> se manifeste, vous n'avez pas beaucoup de choix en dehors deQuerySelectorall () code>, est-ce que vous?