2010-10-04 10 views
16

Todavía estoy aprendiendo sobre jQuery, pero no he podido encontrar una respuesta sólida. Sé que cada vez que utiliza el selector jQuery $(...) hay un costo de rendimiento, pero ¿tiene un costo significativo $(this) donde debe almacenarlo en caché antes de usarlo mucho?

var $this = $(this); 
+0

Como referencia, el costo de $ (esto) es: http://stackoverflow.com/a/6587740/781695 – Medorator

Respuesta

11

Si se está utilizando mucho, sí que tiene sentido, o cadena, por ejemplo .:

$(this).fadeIn().fadeOut().somethingElse(); 

Si caro? No, realmente no en el gran esquema de cosas ... pero si estás en un bucle, el costo se multiplica, por lo que es mejor guardarlo en la memoria caché. Si lo está utilizando más de una vez, tiene sentido, cuánto sentido tiene depende de la cantidad de rendimiento que suponga para ese código.

0

Buena pregunta, Jason. Imagino que la función de selector jQuery nota la palabra clave this de manera bastante eficiente. Dicho esto, tiene sentido no hacer llamadas repetidas al mismo selector si puede evitarlo. Aquí es donde entra en juego método de encadenamiento útil:

$(this).hide().show().hide(); 

Si usted va a utilizar el mismo selector mucho en diferentes puntos en la misma función, probablemente haría una variable para almacenar el valor de retorno de la jQuery selector de función. En ausencia de eso, no me preocuparía, porque es realmente una cantidad muy pequeña de procesamiento lo que se hace ... especialmente porque estoy bastante seguro de que la biblioteca jQuery comprueba la palabra clave this (y un tipo de cadena) antes ejecuta cualquier expresión regular.

+5

jQuery nunca vería 'this'. Solo recibiría la referencia a la que 'this' hace referencia en ese punto del código. No puede tratarlo especialmente. – bambams

+0

Ah ha ... y eso tiene sentido. Aún así, una referencia específica a un elemento seguramente no requeriría mucho procesamiento antes de que la función devuelva un valor, en comparación con pasar un selector de cadenas. – treeface

+0

Una de las primeras comprobaciones que jQuery va a hacer es ver si el selector es un elemento DOME, y si es así simplemente devuelva el elemento envuelto. No me molesta que las personas usen '$ this' porque es bueno acostumbrarse a los selectores de caché, pero en el caso de' this' es bastante irrelevante con cuál vayas. –