2010-03-08 7 views
4

Je sais qu'il est préférable pratiques de codage pour éviter inline javascript comme:Inline javascript performances

<img id="the_image" onclick="do_this(true);return false;"/> 

Je pense à passer ce genre de choses pour les événements de clic jquery liés comme:

$("#the_image").bind("click",function(){ 
    do_this(true); 
    return false; 
}); 

Will Je perds toute performance si je lie une tonne d'événements de clic? Je ne m'inquiète pas du temps qu'il faut pour lier initialement les événements, mais des temps de réponse entre le clic et le moment. Je parie que s'il y a une différence, c'est négligeable, mais j'aurai une tonne de fonctions liées. Je me demande si les navigateurs traitent l'attribut onclick de la même manière qu'un événement lié.

Merci

+0

Combien y a-t-il de "a tonne"? –

Répondre

2

Epargnez-vous les soucis, utilisez l'événement sur

$("#the_image").on("click",function(){ 
    do_this(true); 
    return false; 
}); 

Un événement, sans perte de performance avec plusieurs éléments.

+2

"aucun succès de performance avec plusieurs éléments" est définitivement faux. Vous pourriez ne pas le remarquer sur quelques éléments, mais mettre un événement en direct sur des centaines ou des milliers d'éléments et vous verrez un coup de performance. En outre, je ne vois pas pourquoi vous auriez besoin d'un événement en direct sur un seul élément. (Votre exemple utilise un identifiant pour le sélecteur CSS, qui est unique.) –

+2

Je reprends mon commentaire précédent; Apparemment, l'équipe de jQuery a optimisé son algorithme 'live' avec jQuery 1.4, de sorte que le coup de performance qui vient avec l'utilisation de' live' est pratiquement parti. +1 –

+0

@MikeRobinson Il est peut-être utile de mettre à jour votre réponse pour clarifier que .live est maintenant obsolète – Undefined

1

Dans mon travail, cela dépendait. J'ai déplacé tous mes événements à jquery. Ensuite, j'ai profilé le javascript en utilisant FireBug pour voir ce qui prenait le plus de temps. Ensuite, j'ai optimisé ceux qui prenaient le plus de temps.

Si ce n'est que quelques-uns, vous ne remarquerez aucune dégradation. Si c'est des centaines ou des milliers, alors vous pourriez.

0

La différence est négligeable. Si vous devez lier plusieurs éléments de la page, il peut y avoir un impact sur les performances, et vous pouvez vouloir lier un objet de niveau supérieur et intercepter simplement l'élément cible (image) où vous liez le clic à un DIV contenant marque. A part ça, ça devrait aller et cela dépendra de votre cas d'utilisation.

Regardez dans l'événement bouillonnant dans javascript pour plus de détails.

+0

Merci, maintenant je me demande si le coup de performance vient parce que c'est jquery, ou est-ce que ça nuit aux performances si: The_image.onclick = function() { do_this (true); }; Merci encore! – Geromey

+0

C'est principalement le nombre d'écouteurs d'événements, en particulier dans IE, car dans IE, le moteur js et le moteur de rendu/DOM sont des frontières COM croisées. La différence entre les deux est négligeable, mais en utilisant .live peut aider, ainsi peut se lier à quelque chose de plus haut dans le DOM afin que vous puissiez l'attraper sur une bulle d'événement. – Tracker1