Sé que llegué un poco tarde a este hilo, pero solo quería mencionar el hecho de que el envoltorio redundante de objetos DOM es uno de los crímenes cometidos con mayor frecuencia contra jQuery. Cuidar su jQuery-instance la construcción puede tener efectos tremendos en cuanto al rendimiento y es tan fácil de hacer que no tiene excusa para no hacerlo.
Normalmente, cuando las personas tienen un objeto DOM (ya sea que se haga referencia a él) this
o element
) van a tratar de envolver cada vez que necesitan acceso a un método jQuery:
jQuery(this).css('a', 'b');
El problema es cuando estás haciendo esto varias veces:
jQuery(this).css('a', 'b');
jQuery(this).find('span').attr(...);
jQuery(this)....
Cada vez jQuery()
se llama, se construye una nueva instancia de jQuery. Ese tipo de operación es costosa y debe evitarse si es posible, especialmente en bucles.
Para evitar esto, para empezar, puede utilizar el encadenamiento con todos los métodos que devuelven una instancia de jQuery $(this).css(a,b).attr(a,b)...
). El resto del tiempo que debe tener una variable definida localmente que se refiere a la instancia de jQuery y luego sólo tiene que utilizar:
var self = jQuery(this);
self.css(...);
self.attr(...);
Si estás haciendo esto dentro de una función de devolución de llamada .each()
, todavía hay un nuevo objeto jQuery siendo construido en cada iteración. Esto se puede evitar por tener un objeto jQuery genérica que mutar continuamente y luego se puede ejecutar métodos jQuery fuera de esa única instancia:
vistazo a esto:
jQuery.single = function(a){
return function(b){
a[0] = b;
return a
}
}(jQuery([1]));
Ahora mira esto:
$('a').each(function(i){
$.single(this).append('Anchor number ' + i);
});
Solo se está utilizando un objeto jQuery. Puede que sea aún más rápido, evitando el identificador de resolución:
$_ = $.single;
$('a').each(function(i){
$_(this).append('Anchor number ' + i);
});
Alimento para el pensamiento. Más información aquí: http://james.padolsey.com/javascript/76-bytes-for-faster-jquery/
para convertir un objeto DOM en un objeto jQuery – hasen