J'utilise jQuery depuis longtemps et j'ai écrit un plugin de diaporama pour mon travail et je (pas 100% consciemment) écrit probablement 75% dans une seule chaîne. Il est entièrement commenté et je spécifie chaque end()
et ce qu'il réinitialise à, etc, mais est-ce ralentir jQuery ou le chargement DOM, ou, est-ce que cela accélère réellement?Les longues chaînes jQuery sont-elles mauvaises?
Répondre
Cela dépend de votre code spécifique, comme toujours. Quant à stocker une référence vs .end()
, ben ... avec une très longue chaîne, c'est plus rapide de ne pas enchaîner vs .end()
appels, tout simplement parce que vous devez gérer les extra baggage (storage/restoring), comme la référence .prevObject
, la .selector
, .context
, etc. que vous probablement ne se soucient pas dans de nombreux cas .... et juste plus de références entrelacées aux objets précédents. Où il est plus coûteux de mesurer ... ce n'est pas l'exécution (bien que cela soit plus lent, même si infinitésimal) ... c'est la collecte des ordures plus compliquée pour nettoyer tous ces objets plus tard, puisque le graphe de dépendance est maintenant beaucoup plus grand.
Maintenant ... fera-t-il une différence mesurable? pas à moins que votre chaîne ne soit vraiment longue, dans ce cas probablement une micro-optimisation dont vous n'avez pas à vous inquiéter dans la plupart des cas.
99% du temps, à moins que vous ne fassiez une performance accablante pénalisante appel, ne vous inquiétez pas à ce sujet, comme avec la plupart des micro-optimisations. Si vous avez un problème avec la performance, alors entrez dedans.
+1, pour les bons conseils sur l'utilisation de '.end()' –
+1 Pour le point concernant la taille du graphe de dépendance. – Orbling
Merci! Bon à savoir. Je fais de la mise en cache, etc, mais pour cela il n'y a pas beaucoup de sélecteurs et le code a juste coulé bien enchaîné, donc je suis allé avec ça alors j'ai pensé ... euh oh ... cela pourrait ralentir les choses. –
Mon deviner ne serait pas une différence, ou plus rapide, en raison du manque d'intermédiaires.
Le seul inconvénient majeur est à la clarté, si vous pensez via les commentaires qu'il est évident sans le faire multi-ligne avec des variables intermédiaires, via des commentaires ou juste une chaîne d'appel bien propre puis bien.
Une des choses les plus chères que vous pouvez faire dans un navigateur moderne est d'accéder et de manipuler le DOM. Le chaînage vous permet de minimiser les recherches réelles que vous avez à faire, ce qui peut signifier un code beaucoup plus rapide. L'autre option consiste à effectuer la recherche initiale, à la stocker dans une variable et à tout faire en dehors de cette variable. Cela étant dit, jquery a été spécialement conçu avec cette api chaining à l'esprit, il est donc plus idiomatique de la chaîne.
Je pense que l'enchaînement de jQuery est une fonctionnalité intéressante ... on devrait vraiment l'utiliser plus souvent. par exemple:
$(this)
.find('.funky')
.css('width', 30)
.attr('title', 'Funky Title')
.end()
.fadeIn();
est beaucoup mieux (et élégant) - ne pas créer 2 objets jQuery $(this)
que:
$(this).find('.funky').css('width', 30).attr('title', 'Funky Title');
$(this).fadeIn();
Vous n'avez pas besoin de créer deux jQuery '$ (this)' ... 'var obj = $ (this) .find ('. Funky'). Css ('width', 30) .attr ('title' , 'Titre génial'); obj.fadeIn(); ' – Matt
bien sûr si vous le stockez dans une variable - mais ce n'est pas ce que la plupart des utilisateurs jQuery ont tendance à écrire dans mon expérience, ils" abusent "juste $(). c'est pourquoi je trouve que l'enchaînement est élégant - on peut rester bon marché sur les variables :). d'ailleurs vous êtes smt différent du mien ... (fading '$ (this) .find ('. funky')' au lieu de '$ (this)') – kares
@Matt - cela n'aura pas le même effet , votre variable 'obj' se réfère à des éléments' .find', pas 'this' :) –
- 1. Trouver les plus longues chaînes répétées?
- 2. PHP preg_match_all échoue sur les longues chaînes
- 3. Débogueur XCode: afficher les chaînes longues
- 4. GAEUnit: Problème avec les chaînes longues dans les déclarations assert?
- 5. Utilitaire pour trouver les chaînes répétées les plus longues possibles
- 6. Raccourci Eclipse pour fendre des chaînes longues
- 7. jQuery curseur ui mauvaises valeurs?
- 8. WCF - Comment accepter les chaînes longues en tant que paramètres
- 9. Problème persistant des longues chaînes avec Hibernate
- 10. Comment contrôler l'option du compilateur "longues chaînes"?
- 11. Multiplier les valeurs longues?
- 12. trouver de longues sous-chaînes répétées dans une chaîne massive
- 13. Imprimer de longues chaînes de texte LaTeX/Sweave
- 14. Citer des chaînes longues sans newlines en Python
- 15. Comment réduire la longueur des très longues chaînes?
- 16. Base de données Stockage des chaînes de texte longues
- 17. AS3: Détecter les touches longues
- 18. android videoview - gérer les mauvaises erreurs urls?
- 19. C - sysinfo() retournant les mauvaises valeurs i686
- 20. CMake utilise les mauvaises Cboost libs
- 21. iphone - animations mauvaises
- 22. Pourquoi mon implémentation d'ElGamal ne fonctionne-t-elle pas pour les longues chaînes de texte?
- 23. Un type de données idéal pour les longues chaînes utf8 dans mysql
- 24. Quelle est l'utilisation la plus lisible de String.Format pour les chaînes longues avec de nombreux paramètres?
- 25. jQuery remplacer les chaînes dans plusieurs classes
- 26. Jquery: Faire des opérations sur les chaînes
- 27. trouver et remplacer les chaînes dans jquery
- 28. @ symbole pour les chaînes dans jQuery
- 29. jQuery: Remplacer les chaînes par .each()
- 30. Détection de mauvaises images jpeg
taggés ce '[performances]' aussi bien, puisque c'est préoccupation principale, il semble :) –