2

O jQuery revolucionou a forma como escrevemos JavaScript. Quando usado corretamente, pode tornar seu site mais interativo, interessante e agradável. Para isso, é necessário que respeite algumas regras e boas práticas ao escrever seus códigos.

1# Sempre comece com um ID

O seletor mais rápido do jQuery é o seletor de ID, $("#elemento_id"). Isso ocorre justamente porque esse método aponta para uma função nativa do JavaScript, o getElementById().

Selecionando um único elemento

Selecionar um único elemento no jQuery, quando se tratando de IDs, deve sempre ser feito da maneira mais direta possível. Por exemplo, no documento:

	<div id="sidebar">
		<ul id="menu">
			<li>Opção1</li>
			<li id="opcao2">Opção2</li>
			<li><span>Opção3</span></li>
		</ul>
	</div>

Essa seria uma forma de selecionar nosso elemento de forma lenta:

	var elemento = $("#sidebar #opcao2");

Ao invez disso, como todo ID deve ser único, selecione o elemento diretamente:

	var elemento = $("#opcao2");
Selecionando múltiplos elementos

Primeiramente, a seleção de múltiplos elementos deve sempre ser evitada ao máximo. Trata-se de análise de DOM e loops, o quê é consideravelmente lento.

Para amenizar a baixa performace, sempre derive do ID parente mais próximo:

	var elemento = $("#menu span");

2# Prefira as Tags ao invez das Classes

O segundo seletor mais rápido do jQuery é o seletor de Tags, $("span"). Novamente, isso é porque esse método também aponta para um método nativo do JavaScript, o getElementByTagName().

	<div id="conteudo">
		<form action="?action" method="post" id="form">
			<input type="submit" name="submit" value="submit" class="on">
		</form>
	</div>

Sempre que possível, preceda uma classe por sua tag, também lembre-se de derivar de um ID:

	var elemento = $("#form input.on");

3# Cacheie Objetos jQuery

Um dos grandes fortes do jQuery é a análise do DOM. Mas isso é custoso para performace. Sendo assim, tente minimizar a análise de DOM ao máximo cacheando objetos. Nunca faça isso:

	$("#form input.on").fadeOut("slow");
	$("#form input.on").css('color','white');
	$("#form input.on").bind('click', function(){...});
	$("#form input.on").fadeIn("slow");

Ao invez disso, sempre que for reutilizar um mesmo objeto jQuery, armazene-o em uma variável e utilize-o através dela. Por exemplo, essa seria a forma correta de implementar o código acima:

	var $button_on = $("#form input.on");
	$button_on.fadeOut("slow");
	$button_on.css("color","#ffffff");
	$button_on.bind("click", function(){...});
	$button_on.fadeIn("slow");

Dica: nomeie variáveis de objetos jQuery com $ no início. Isso facilitará sua posterior identificação.

Lembre-se, jamais repita a seleção de um mesmo elemento em sua aplicação.

4# Aproveite o Poder do Encadeamento

O jQuery nos permite encadear seu código através de seus objetos. Isso nos permite escrever menos código e aumenta a performance do nosso script visto que estaremos utilizando o mesmo objeto:

	$("#form input.on").fadeOut("slow").css("color","#ffffff").bind("click", function(){...}).fadeIn("slow");

Consequentemente, nosso JavaScript ficará mais leve.

5# Use Sub-queries

O jQuery nos permite realizar seleções adicionais em código já selecionado. Isso reduz a perda de performance visto que o objeto pai já foi encontrado e armazenado em variável local.

	<div id="conteudo">
		<form action="?action" method="post" id="form">
			<input type="submit" name="submit" value="submit" class="on">
			<input type="reset" name="submit" value="submit" class="off">
		</form>
	</div>

Por exemplo, usaremos sub-queries para selecionar o botões de classe on e off e iremos cacheá-los para uma futura manipulação.

	var $form = $("#form"),
		$button_on = $form.find("input.on"),
		$button_off = $form.find("input.off");

Dica: declarando múltiplas variáveis globais separando-as com vírgulas, salvamos o uso de alguns bytes adicionais.

6# Reduza manipulação de DOM

O objetivo aqui é reduzir o gasto excessivo de performance na manipulação desordenada do DOM. Como sabemos, essa manipulação é lenta e prejudicial quando realizada de forma errada. Para isso, procure armazenar tudo que precisa em memória e somente depois atualize o DOM.

Por exemplo, caso precise criar uma lista dinamicamente, não faça isto:

	var list_array = [...]; // array com 100 posições
	$minha_lista = $("#minha_lista");
	for ( i in list_array )
	{
		$minha_lista.append("<li>" + list_array[i] + "</li>");
	}

Ao invez disso, armazene todas as modificações a serem feitas na lista em memória e realize apenas uma única atualização do DOM. Dessa forma:

	var lista_array = [...]; // array com 100 posições
	lista_dom = null;

	for ( i in lista_array )
	{
		lista_dom += "<li>" + list_array[i] + "</li>";
	}

	$("#minha_lista").append( lista_dom );

Conclusão & Continuação

Mais 5 dicas para aumento de performance de códigos jQuery serão dadas no próximo post da série. Tenha um bom jQuery.




  1. Responder

    Muito bom!
    Uma vez fiz um site que abusava do jQuery, e no que deu? Tive que reescrever o código para html simples e perdi metade das funcionalidades, tudo devido à lentidão que o script causava. Se soubesse disso antes, concerteza o meu site estaria funcionando no ar. Vivendo e aprendendo!


Seu Comentário


Trackbacks

Trackback URL

  1. [...] Nesse post abordaremos algumas novas boas práticas e técnicas para se escrever jQuery de alta performace. O primeiro post ...


Geeklove, expressando nossa Paixão em Código