2010-08-06 3 views
0

Je faisais des tests de performance pour voir si je pouvais utiliser jQuery directement à la place du wrapper d'Ext. Pour commencer, je voulais comparer jQuery (#id) à doc.getElementById, mais je dois faire quelque chose de mal, car jQuery (#id) est horrible plus lent.jQuery() plus lent que getElementById

var searchDoc = searchWin.document; 
var jqSearchDoc = jQuery(searchWin.document); 
for (var i=0; i<500; i++){ 
    var temp = jqSearchDoc.find('#myID'); //takes 1100ms 
    //var temp = jQuery(searchDoc.getElementById('myID')); //takes 3ms 
} 

Une idée de la raison pour laquelle la ligne non commentée est tellement plus lente? et comment le réécrire?

+1

http://stackoverflow.com/questions/1854859/jquery-performance-wise-what-is-faster-getelementbyid-or-jquery-selector –

+0

Est-ce que searchWin n'est pas la fenêtre courante? –

+0

Durilai - merci. Nick, searchWin est un IFrame adjacent. Je sais que getElementById est censé être plus rapide, je n'avais pas prévu de baisse de performance de 100x. Aussi, quand j'ai essayé Ext.get ('myID'); (Ext est la bibliothèque ExtJs ayant aussi des capacités de sélection d'éléments), elle fonctionne exactement comme getElementById. Me donner 3ms fois. – Elijah

Répondre

5

getElementById est une méthode native. jQuery ne l'est pas. jQuery fait les choses sous le capot pour compenser les incohérences du navigateur. Il fait getElementById après avoir fait une correspondance regexp et autres joyeusetés.

Naturellement, jQuery est plus lent car il s'agit d'un enroulement. JQuery serait considéré comme rapide par rapport à d'autres frameworks, puisqu'il s'agit d'un framework. Vous ne pouvez pas comparer une fonction native du navigateur à un framework qui résume des méthodes natives, les méthodes natives seront toujours plus rapides.

Questions connexes