jQuery é uma estrutura brilhante que simplifica a interação com o DOM significativamente, e uma das coisas mais comuns que você vai encontrar-se fazendo é criar jQuery objetos como: $("div")
. Este teste de desempenho mostra quanto tempo estamos realmente sacrificando para a conveniência de usar jQuery, e o que queremos evitar é criar um excesso de objetos jQuery.
O problema ocorre quando você deseja usar um objeto jQuery várias vezes e a maneira usual de fazer isso é criar uma variável que referencia o objeto jQuery, e para muitas pessoas isso funciona e eles estão muito felizes com isso. Nunca fiquei totalmente satisfeito com essa solução, então um dia criei uma função “use” personalizada que funciona com qualquer objeto jQuery. Você executa o seletor uma vez e, em seguida, usa a palavra-chave “this” para se referir a ele. Não há mais variáveis extras para monitorar e, como bônus, torna-se muito fácil ver rapidamente qual código está afetando quais partes do DOM.
Agora eu sei que há desenvolvedores por aí que não gostam muito de usar a palavra-chave “this” nessas situações, então esta solução não será para todos, mas funciona para mim e tenho certeza que será útil a muitos outros programadores por aí também.
Aqui está outro teste de desempenho que compara a criação de vários objetos jQuery com o uso da função “usar” personalizada. Como esperado, se você criar um objeto jQuery duas vezes, você obtém o dobro da velocidade, três é igual a três vezes a velocidade, quatro é igual a quatro, etc.
Você pode verificar o código aqui: https://github.com/davidcollingwood/do-you-even-code
Um Exemplo Simples
$("div").use(function() {
this.find("p").addClass("paragraph");
this.addClass("example").show();
});
De dentro de um manipulador de clique
$("div").click(function() {
$(this).use(function() {
this.find("p").removeClass("paragraph");
this.removeClass("example").hide();
});
});
Usando o argumento opcional
$("div").use(function(that) {
this.find("p").addClass("paragraph");
this.click(function() {
that.removeClass("example").hide();
});
this.addClass("example").show();
});