Feb 5

Técnicas para deixar seus scripts em jQuery mais rápido

Um grande amigo, programador de interface também, me indicou artigo interessante falando de 25 técnicas e truques para aumentar a velocidade dos seus scripts em jQuery. O artigo está em inglês, quem tem fluência no idioma é legal ler a matéria dele também, quem não tem fluência, ou tem mais facilidade em ler em português mesmo, segue as dicas que achei mais interessantes, com meus humildes comentários.

Antes de começar, devo dizer que algumas técnicas são radicais, e merecem ser analisadas se realmente necessitam disso, então se você considera que o desempenho da sua página está bom, e o código vai ficar desorganizado, não faça. Agora mais aos truques:

Carregue o jQuery pelo Google Code

Se você é como eu, você não deve gostar de fazer requisições externas no seu site, mas carregar o jQuery pelo Google Code pode trazer vantagens ao seu site:
- Se muitas pessoas fizerem isso, é provavel que ao entrar no seu site, o usuário não precise baixar o arquivo novamente pois já tem ele em cache, de outro site que também faz a requisição do jQuery pelo Google Code.
- Diminuição no tráfego da banda, o jQuery, muitas vezes representa de 10% a 30% do peso total de uma página, se carregado pelo google, pode diminuir o tráfego (se isso for um problema no seu servidor).

E para carregar pelo google code é fácil:

<script src="http://jqueryjs.googlecode.com/files/jquery-1.3.1.min.js" type="text/javascript"></script>

Junte seus scripts num arquivo

Nem sempre isso é possível, mas, se você tem um javascript pra lightbox, outro pra validação, outro pra sei lá o que, e eles sempre são carregados, vale a pena juntar todo o código num script só. A vantagem é que, ao invés do servidor fazer 5 requisições http, ele faz uma só, dando velocidade no loading da página na hora mais importante, quando a página fica em branco, fazendo download dos scripts e css do head. É lógico que fica mais difícil de trabalhar, menos organizado, por isso é bom fazer isso só depois do site estar pronto. Outra forma de melhorar, é que, em um só script, podemos fazer apenas um $(document).ready() , ao invés de ter várias funções espalhadas pelos scripts.

Minifique seus scripts

Outra medida para se fazer após o término da produção do site, é minimizar os scripts, basicamente minificar significa retirar todos os comentários, tabs, quebras de linha, e espaços desnecessários para execução do script, deixando todo o código em um linha só, esse processo diminui em média 30% do tamanho do arquivo javascript, deixando o load da página mais rápido. Para minificar seu script, existem diversos sites onde se cola o script original e eles minificam seu script pra você, no post original ele recomenda o Packer do Dean Edwards, mas também tem um o javascript compressor que também faz a mesma coisa, mas é mais fácil de decorar sua url.

Evite processamento desnecessário nos loop’s (como seletores)

Isso não vale só pra jQuery / javascript, vale pra qualquer linguagem de programação. Verifique se nenhum processamento dentro de um for é desnecessário. Ex.:

for (i = 0; i < 1000; i++) {
var container = $('#container ');
container.append('Este é o ítem: ' + i);
}

ou assim:

for (i = 0; i < 1000; i++) {
$('#container ').append('Este é o ítem: ' + i);
}

Os seletores são processos complexos que envolve diversas funções ( getElementById, getElementsByTagName, getElementsByClass entre outras ) além de diversos loops para obter somente os elementos desejados.

Então, o melhor jeito é assim assim:

var container = $('#container ');
for (i = 0; i < 1000; i++) {
container.append('Este é o ítem: ' + i);
}

Diminua suas manipulações em DOM

Contrariando o exemplo acima, tem um melhor jeito ainda de fazer o for.

var htm = '';
for (i = 0; i < 1000; i++) {
htm +='Este é o ítem: ' + i;
}
$('#container ').append(htm);

Ao invés de dar 1000 appends no seu elemento, você dá um só, e monta a lista numa variável javascript, tal processo é aproximadamente de 6 vezes.

Use ID’s ao invés de classes sempre que possível

Desde que não atrapalhe seu css, e que não se repita nenhum id no html, use id’s para posteriormente selecionar o objeto.veja mais tidbits O javascript trabalha mais rápido com ID (getElementbyId) do que com classes (getElementsByClass).

Veja o exemplo com class que no teste feito pelo autor, rodou em 5066 milisegundos (5 segundos):

var lista = '<ul>';
// Adicionando li's com class
for (i = 0; i < 1000; i++) {
lista += '<li class="item' + i + '">Este é o ítem '+i+'</li>';
}
lista += '</ul>';
$('body').append(lista);
// Selecionando elementos com class
for (i = 0; i < 1000; i++) {
var itemSelecionado = $('.item' + i);
}

Já no segundo exemplo, faremos a mesma coisa com id’s que no teste feito pelo autor, rodou em 61 milisegundos (83 vezes mais rápido):

var lista = '<ul>';
// Adicionando li's com id
for (i = 0; i < 1000; i++) {
lista += '<li id="item' + i + '">Este é o ítem '+i+'</li>';
}
lista += '</ul>';
$('body').append(lista);
// Selecionando elementos com id
for (i = 0; i < 1000; i++) {
var itemSelecionado = $('#item' + i);
}

Use diversas ações sobre um seletor (chaining)

Evite selecionar o mesmo elementos várias vezes, atribua todas as funções em um seletor só:

Ao invés de usar:

footer = $('#footer');
footer.find('a.reprovar_comentario');
footer.html('aprovar');
footer.attr('class','aprovar_comentario');
footer.attr('title','aprovar');
footer.unbind();
footer.click(aprovarComentario);

use somente uma seleção :

footer = $('#footer');
footer
	.find('a.reprovar_comentario')
	.html('aprovar')
	.attr('class','aprovar_comentario')
	.attr('title','aprovar')
	.unbind()
	.click(aprovarComentario);

Use sempre a última versão do jQuery

veja mais tidbitsNormalmente novas versões de programas, sistemas operacionais, etc… são mais pesadas com um monte de funções que 99% dos usuários nunca vão usar, mas John Resig, criador do jQuery, continua trabalhando em cima disso, só pra melhorar e deixar o jQuery mais rápido, a atual versão, 1.3.1 ganhou muita velocidade em cima da 1.2.6, o que gerou algumas incompatibilidades, principalmente com plugins. Então, não precisa refazer (se não estiver mega lerdo) seus antigos sites, mas ao criar um novo, tente usar sempre a última versão do jQuery.

Se alguém ler isso e tiver mais alguma dica legal, diz aí.

[]s

Feb 2

Market Share Janeiro de 2009 – Produtos da microsoft em queda.

A Net Aplications disponibiliza mensalmente relatórios com estatísticas (ou curiosidades) para todos nós, desenvolvedores ou até mesmo clientes.

Os relatórios são muitos, sempre em participação, sendo assim. Qual a participação de cada navegador, de cada sistema operacional, cada buscador, resoluções de tela, etc.

Seguindo a tendência, Internet Explorer, Windows e o buscador MSN vem perdendo participação do mercado.

Confira os gráficos referente a janeiro de 2009:

Navegadores

Market Share Janeiro de 2009 - Navegadores

Enquanto a participação do Internet Explorer cai, todos os outros navegadores tiveram pequenas altas.

Compare com dezembro de 2008.

Navegadores por versão

Market Share Janeiro de 2009 - Navegadores por versão
Internet Explorer 6 pela primeira vez desde 2002 fica abaixo de 20%, será que até o final do ano chega abaixo dos 10%? Espero que sim.

Compare com dezembro de 2008.

Sistemas Operacionais

Market Share Janeiro de 2009 - Sistemas Operacionaisveja mais tidbits
Destaque para o Mac que vem crescendo bastante e logo mais deve chegar a 10% do mercado. Enquanto Iphone sobe e linux cai, será que eles ainda trocam de posição?

Compare com dezembro de 2008.

Buscadores

Market Share Janeiro de 2009 - Buscadores
Pouco se mudou do mês passado pra cá, o Google teve uma pequena alta, Yahoo uma pequena baixa enquanto os demais buscadores ficaram praticamente estáveis.

Compare com dezembro de 2008.

Resoluções de Tela

Market Share Janeiro de 2009 - Resolucoes de tela
Depois do natal, as resoluções consideradas alta, tiveram uma pequena alta, enquanto o 800×600 vai morrendo lentamente. Já é hora de parar de fazer layouts para essa resolução (tipo o tidbits hahaha)?

Compare com dezembro de 2008.

Todos os dados são referentes ao último mês (Janeiro de 2009). Veja os Market Shares antigo para comparar as diferenças com o último mês.

Jan 30

Novidades dos browsers, Mozilla lança Fennec, IE8 roda Javascript lento, Opera Mini é lançado pro Android

Olá pessoal, fiquei algum tem sem escrever aqui, estava num período de férias do blog (sem tempo também, estava trabalhando no mínimo 10 horas por dia além de fazer freela), semana que vem prometo bons posts, mas por hoje, segue uma coleção de notícias recentes que achei interessante nesse chamado “mercado dos browsers”.

Guerra dos Browsers

O Fennec, um Firefox para celulares deve estrear em fevereiro desse ano. A primeira versão deve chegar, primeiro, nos HTC Touch Pro.

veja mais tidbitsO demorado IE8 que parece que nunca vai ser estreado. Nós, os programadores de interface esperamos que enfim a Microsoft, que pode ter que retirar o Internet Explorer do windows, lance um browser que suporta os padrões web e quem sabe, o IE6 é aposentado de vez? Mas a notícia que nós recebemos é desanimadora.

Uma semana depois da Microsoft disponibilizar o Release Candidate do Internet Explorer 8 um teste da Computerworld EUA afirma que o IE8 tem o pior desempenho de Javascript entre os novos browsers, um pesquisador diz que o recurso de privacidade do IE8 não é nada privativo na sua versão beta, além das famosas falhas de segurança da microsoft que disponibiliza atualizações toda semana para corrigí-las.

E por final, aproveitando o novo mercado de browsers para celulares, o Opera Mini finalmente é lançado para Android , apesar de já ter sido beta a muito tempo.

Jan 20

Diário da Campus Party – 20 de Janeiro

Pra minha tristeza, e pra alegria dos que, por motivos de força maior, não puderam ir, a Campus Party começou meio decepcionante. Toda a “promessa” da festa ficou bem esquecida diante da desorganização do evento. Ok, vamos considerar que era um evento pra 6mil pessoas, mas o problema maior de toda a equipe de apoio era a falta de informação / comunicação.

Pra quem não pretende ir, eu vou colocar todas as minhas lamúrias e as dicas pra quem ainda vai pra CP nesse parágrafo único, e quem preferir pule direto pra parte que eu falo do que eu vi por lá. Logo quando eu cheguei, hoje de manhã, eu já vi que o dia ia ser complicado. Pra começar, os ônibus gratuitos saindo do metrô do Jabaquara, que você precisa adivinhar de onde sai, não existe ninguém da CP dando essa informação no metrô, e nenhum funcionário do metrô sabe o que é o evento. Se você ainda vai (de metrô), a dica é na saída do metrô, siga à esquerda até o final do corredor, suba a escada rolante, saia do terminal Jabaquara e espere do lado de fora do terminal, mais ou menos depois do prédio do Itaú que está do outro lado rua. Outra coisa é o credenciamento, não chegue “próximo” à um horário que você quer assistir uma palestra. Acredite, o pessoal do credenciamento é mega desorganizado e lento, e você vai perder o evento que queria ir – só pra constar, eu cheguei no portão do evento às 10:40, e só entrei ao meio dia! Uma dica importante e que quase ninguém está sabendo é que dentro da área de Camping, tem um guarda-volume, bem escondidinho lá no fundo, gratuito, e super tranquilo. Também não confie nos horários e locais das palestras – eles mudam misteriosamente e sem que você fique sabendo ou que alguém tente te informar. O Wi-fi também está desastroso, apesar da conexão com cabo ser tão boa. Aliás, quem souber de um wi-fi com senha funcionando decentemente pra me passar, ganha um suco. Quanto as comidas e bebidas (principalmente as bebidas) estão bem carinhas lá. Como eu sou vegan, bati um P.F. com arroz, salada e batata – sem a carne e o feijão (com bacon), e paguei 9 reais por uma comida de buteco copo sujo. Minha opção a partir de amanhã é pegar o ônibus até o Jabaquara, fazer as compras de comida no Pão de Açúcar e voltar no próximo ônibus(que passa a cada 30 minutos).

Ainda assim, num evento desse, o que mais legal mesmo são as pessoas. A rede do dc++ rolando solta, e as pessoas compartilhando arquivos à 14mb – uma coisa linda que só. O pessoal do modding fazendo bonito também, cada máquina de brilhar os olhos. A área de design está meio miada, lugares sobrando nas bancadas. O CampusBlog tava menos pop do que eu esperava, mas ficou meio espremidinho do lado do Palco Principal (aliás, a proximidade dos palcos, transformou os eventos simultâneos em ruídos, e tá díficil ouvir o pessoal falando lá na frente).

Pra quem não é campuseiro, a área gratuita até que tá legalzinha, com alguns standes com jogos interessantes – eu queria jogar um que é uma disputa onde suas ondas cerebrais movem uma bolinha, e ganha quem relaxar mais – mas essa vai ficar pra amanhã, porque tinha fila. Na verdade tá tão bem organizadinha a parte gratuita, que tem gente que tem até a sensação que aqui dentro, na área dos campuseiros a coisa deve estar bem maior. Teve gente até pedindo meu crachá pra passear na área fechada  ehehehe.

PS: Eu não empresto. Ainda assim eu sou gente boa, e quem quiser conversar comigo, aqui no blog tem meu msn.

PS2: O Twitter não está em tempo real, como eu pretendia, porque realmente a rede wireless não funfa.