KingHost
Canais iMasters

Javascript

30 dicas para melhorar o desempenho do JavaScript

O Javascript é uma tecnologia maravilhosa - mas complicada - que enriquece os sites, mas que frequentemente pode ser um obstáculo para sua operação eficiente, com prejuízo  para a experiência do usuário.

Melhorar a experiência do usuário – seja ele um consumidor ou um administrador de sistema – é nossa missão no Monitis. Por quê? Porque foi provado que uma experiência otimizada do usuário final melhora as taxas de conversão, os rankings do Google Search e as taxas de satisfação do visitante da web. O que isso significa? Melhores negócios para você e para sua empresa!

Naturalmente, há muitas formas de melhorar sua vivência na computação, por exemplo checando o desempenho do carregamento de páginas na web. Administradores de websites podem usar o teste de carregamento de página do Monitis ou usar o contínuo navegador para monitoramento de toda a página. O carregamento de páginas é afetado por muitos fatores, incluindo velocidade da internet, locação de hospedagem, desempenho do servidor e do aplicativo, design e otimização do site. Apresentamos abaixo as dicas para desempenho do JavaScript. Novamente, elas podem ajudar webmasters e webdevelopers na criação de websites rápidos e fornecer uma experiência de primeira categoria ao usuário.


Dica #1 – Avalie variáveis locais

(http://blogs.msdn.com/b/ie/archive/2006/08/28/728654.aspx)

Em princípio, específico para IE, porque variáveis locais na maioria das vezes são encontradas baseadas no escopo do mais específico para o menos específico, podendo passar por níveis múltiplos de escopo, e os look-ups podem resultar em queries genéricas. Na definição da função do escopo em uma variável local sem uma declaração var precedente, é importante que cada variável seja antecedida por var, de forma a definir o escopo corrente, para impedir o look-up e acelerar o código.

Dica #2 – Crie códigos de atalho para acelerar a codificação

(http://www.spoonfeddesign.com/4-easy-tips-to-improve-javascript-efficiency)

Para códigos úteis de uso constante, a aceleração do processo de codificação pode ser obtida criando atalhos para códigos mais longos, por exemplo, document.getElementById. Criando atalhos, scripts mais longos não demorarão tanto para codificar, e economizarão tempo no processo como um todo.

Dica #3 – Manipule fragmentos de elementos antes de incorporá-los ao DOM

(http://www.jquery4u.com/dom-modification/improve-javascript-performance)

Antes de colocar elementos no DOM, certifique-se de que todos os ajustes foram feitos para aumentar o desempenho do JavaScript. Isso eliminará a necessidade de deixar de lado as APIs Prepend ou Append jQuery APIs.

Dica #4 – Economize bytes usando Minification

(http://sixrevisions.com/web-development/10-ways-to-improve-your-web-page-performance)

Reduza o tamanho dos arquivos de seus documentos JavaScript removendo caracteres (abas, código-fonte, documentos, espaços etc) sem mudar a funcionalidade do arquivo.

Há algumas ferramentas de Minification que podem ajudar nesse processo, com a possibilidade de reversão. Minification é o processo de remoção de todos os caracteres desnecessários do código-fonte, sem mudar sua funcionalidade.

Dica #5 – Não use loops aninhados se não forem necessários

(http://www.techstrut.com/2009/08/04/10-javascript-performance-tips)

Evite loops indesejáveis, tais como for/while, de forma a manter a linearidade do JavaScript e impedir que se tenha que passar por milhares de objetos. Loops indesejados podem fazer o browser trabalhar mais arduamente para processar os códigos e podem retardar o processo.

Dica #6 – Faça cache de objectos para aumentar o desempenho

 (http://www.techstrut.com/2009/08/04/10-javascript-performance-tips)

Muitas vezes scripts são repetidamente usados para acessar certo objeto. Armazenando um objeto muito acessado em uma variável, e usando uma variável em referências subsequentes a esse objeto, um aumento do desempenho pode ser obtido imediatamente.

Dica #7 – Use um arquivo .js para cache de scripts

(http://www.javascriptkit.com/javatutors/efficientjs.shtml)

O uso desta técnica permite um melhor desempenho, por permitir ao browser carregar o script  uma vez, e somente voltar a chamá-lo do cache caso a página seja recarregada ou revisitada.

Dica #8 – Coloque o JavaScript no final da página

(http://developer.yahoo.com/blogs/ydn/posts/2007/07/high_performanc_5)

Incluir os scripts o mais próximo possível do final da página irá aumentar a velocidade de renderização e melhorar o paralelismo de download. O resultado é que a página parecerá carregar mais rápido, e em alguns casos pode economizar no total de código necessário.

Dica #9 – Use o jQuery como framework

(http://www.techstrut.com/2009/08/04/10-javascript-performance-tips)

Usado no scripting do HTML, o jQuery é uma facilidade na utilização da biblioteca JavaScript que pode ajudar a aumentar a velocidade de qualquer website. O jQuery  fornece um grande número de plug-ins que podem ser usados rapidamente, mesmo por programadores iniciantes.

Dica #10 – Comprima seus arquivos com GZip

(http://devmoose.com/coding/10-ways-to-instantly-speed-up-your-website)

O GZip pode reduzir o arquivo JavaScript consideravelmente, economizando largura de banda e acelerando o tempo de resposta. Os arquivos JavaScript podem ser muito grandes e, sem compressão, podem derrubar qualquer website. Arquivos menores proporcionam uma experiência na web mais rápida e mais satisfatória.

Dica #11 - Não use a palavra-chave “With”

(http://blogs.msdn.com/b/ie/archive/2006/08/28/728654.aspx)

A palavra-chave “With” é considerada uma ovelha negra por ter diversas falhas que podem ser bem frustrantes. Embora simplifique o trabalho com propriedades locais  mais simples, a “With” pode fazer a procura por variáveis em outros escopos mais custosas.

Dica #12 – Minimize solicitações ao HTTP

(http://www.websiteoptimization.com/speed/tweak/http)

Minimize solicitações HTTP para processar páginas, combinando arquivos externos e incluindo o JavaScript diretamente nas páginas XHTML. Cada vez que um único HTTP acessa o servidor, o resultado é um grande número de atrasos.

Dica #13 – Implemente disparo de eventos

(http://www.djavaweb.com/blog/75-speed-up-your-webdevelop-smart-event-handlers.html)

Com disparo de eventos, fica mais fácil usar um único handler de eventos para gerenciar um tipo de evento para toda a página. Sem o uso do disparo de eventos, grandes aplicativos da web podem travar por causa de muitos handlers de eventos. Os benefícios do disparo de eventos incluem: menos funcionalidades para gerenciar, menores ligações entre código e DOM e menos memória necessária ao processamento.

Dica #14 – Não use o mesmo script duas vezes

(http://www.abhishekbharadwaj.com/2010/12/speed-up-your-website-avoid-duplicate-scripts)

A duplicação de scripts terá um impacto significativo no desempenho. Criará solicitações desnecessárias ao HTTP, especialmente no browser IE. O uso de uma tag SCRIPT em uma página HTML ajudará a evitar a duplicação acidental de scripts.

Dica #15 – Remova Double Dollar $

(http://www.mellowmorning.com/2008/05/18/javascript-optimization-high-performance-js-apps)

O uso da função “double dollar $” não é necessariamente útil no aumento da velocidade de um website.

Dica #16 – Criando referências variáveis

(http://mondaybynoon.com/2009/04/27/a-couple-of-quick-tips-for-javascript-optimization)

Ao trabalhar com um nó específico repetidamente, o melhor é definir a variável com esse nó em particular, em vez de ficar voltando a ele frequentemente. Essa não é uma melhoria significativa, mas pode vir a ser, quando em grande escala.

Dica #17 – Aumente a velocidade da identificação de objetos

(http://dean.edwards.name/weblog/2005/12/js-tip1)

Um método mais eficiente de usar identificação de objetos é usar um código criado dinamicamente baseado fora da identificação de objetos, em vez de executar a identificação de objetos dentro de uma função.

Dica #18 – Escreva Loops eficazes

(http://robertnyman.com/2008/04/11/javascript-loop-performance)

Dependendo do browser, o método usado para escrever Loops pode ter grande impacto no desempenho de um site. A escrita imprópria de loops pode fazer com que páginas fiquem lentas, com muitas queries e execução de loops em paralelo.

Dica #19 – Diminua cadeias de escopo

(http://homepage.mac.com/rue/JS_Optimization_Techniques)

Escopos globais podem ser lentos, porque sempre que uma função é executada, um escopo de invocação temporário é criado. O JavaScript pesquisa o primeiro item na cadeia de escopo e, se não encontrar a variável, percorre toda a cadeia até encontrar o global object.      

Dica #20 – Acesse índices em NodeLists

(http://homepage.mac.com/rue/JS_Optimization_Techniques)

NodeLists são vivas e podem ocupar um monte de memória, já que são atualizados quando um documento subjacente muda. É mais rápido indexar diretamente em uma lista, se o browser não precisar criar um objeto node list.

Dica #21 – Não use ‘eval’

(http://www.javascripttoolbox.com/bestpractices/#eval)

Embora a função “eval” seja um bom método para executar um código arbitrário, cada string que tenha passado pela função eval tem que ser analisada e executada na hora. Esse encargo tem que ser pago toda vez que a execução chega a um eval evocado.

Dica #22 – Utilize funções inline

(http://portal.acm.org/citation.cfm?id=844097)

A Function Inlining ajuda na eliminação dos custos de uma call, e substitui  uma função call pelo corpo da função chamada. Em JavaScript, a execução de uma function call é uma operação de alto custo por necessitar de diversos passos preparatórios para ser executada: alocar espaço para parâmetros, copiar os parâmetros, e decidir o nome da função.

Dica #23 – Implemente Common Sub-expression Elimination (CSE)

(http://sunilkumarn.wordpress.com/2010/10/19/common-subexpression-elimination-cse)

A CSE (Common sub-expression elimination) é uma técnica de otimização do compilador voltada para o desempenho, que pesquisa expressões idênticas, substituindo-as por uma única variável que retém o valor computado. Você pode esperar que o uso de uma única variável local para uma common sub-expression será sempre mais rápido do que não mudar o código.

Dica #24 – Construa o nó DOM e todos seus sub-nós offline

(http://archive.devwebpro.com/devwebpro-39-0030514OptimizingJavaScriptforExecutionSpeed.html)

Na adição de conteúdo complexo a um site, como tabelas, o desempenho é melhorado adicionando sub-árvores complexas offline.

Dica #25 – Tente não usar variáveis globais

(http://wiki.forum.nokia.com/index.php/JavaScript_Performance_Best_Practices#JavaScript_Performace_Best_Practices)

Uma vez que o mecanismo de script pesquisar o escopo ao referenciar as variáveis globais de dentro de uma função ou de outro escopo, a variável será destruída quando o escopo local for perdido. Se as variáveis no escopo global não puderem persistir enquanto durar o script, o desempenho será melhorado.

Dica #26 – Use operações primitivas em vez de invocar funções

(http://wiki.forum.nokia.com/index.php/JavaScript_Performance_Best_Practices#JavaScript_Performace_Best_Practices)

Maior rapidez pode ser obtida na performance de oops e funções críticas usando primitive functions equivalentes ao invés de function calls.

Dica #27 – Não mantenha referências a outros documentos

(http://dev.opera.com/articles/view/efficient-javascript/?page=4#docreferences)

Não reter referências a outros documentos depois que o script as processou aumenta o desempenho. Isso porque quaisquer referências a objetos desses documentos não devem ser mantidas em suas árvores DOM, e o ambiente do script não será mantido na memória. Dessa forma, o próprio documento não é mais carregado.

Dica #28 – Use XMLHttpRequest

(http://dev.opera.com/articles/view/efficient-javascript/?page=4#docreferences)

O XMLHttpRequest ajuda na redução de conteúdo proveniente do servidor, e evita o impacto no desempenho devido à destruição e à recriação do ambiente do script entre o carregamento de páginas. É importante assegurar-se de que o  XMLHttpRequest é suportado, pois, caso contrário, problemas e confusões podem ocorrer.

Dica #29 – Evite o uso de try-catch-finally

(http://dev.opera.com/articles/view/efficient-javascript/?page=2)

Sempre que o catch é executado e a excessão capturada é atribuida a uma variável, essa variável é adicionada ao escopo atual em tempo de execução. Alguns browsers não lidam eficientemente com esse processo, porque a variável é criada e destruída durante a execução. Evite!

Dica #30 – Não use o for-in indevidamente

(http://dev.opera.com/articles/view/efficient-javascript/?page=2)

Como o loop “for-in” requer que o mecanismo de script construa uma lista de todas as propriedades enumeráveis, codificar dentro do for loop não modifica o array. As iterações calculam o comprimento do array e salvam em uma variável len no escopo do loop.

Continuaremos com nossas séries sobre gestão de desempenho, portanto... fique ligado!

Texto original disponível em http://blog.monitis.com/index.php/2011/05/15/30-tips-to-improve-javascript-performance/


Comente também

5 Comentários

rogerio
rogerio

tudo isso se resume a: Não use framewok.

Marcelo Rodrigues
Marcelo Rodrigues

Leia a dica 9 # USE JQUERY. O resto das dicas são basicamente já implementadas como boas praticas na jQuery, e outros frameworks o fazem também. O minimo que o desenvolvedor pode fazer é continuar com essas boas dicas.

Igor Soto
Igor Soto

Não sei, um pouco severo de mais, tavelz...

Renan Souza
Renan Souza

Belo artigo cara, comecei há algum tempo a estudar javascript e achei a linguagem fantástica, e agora com umas dicas dessas aí já dá para focar mais o meu principal objetivo que é o Jquery!

Murilo Machado
Murilo Machado

Pra quem ta iniciando, concordo com o Marcelo Rodrigues... TUDO, sim, TUDO, está implementado no jQuery! Basta saber como, quando e onde usá-lo. Parabéns pelo artigo! #ficadica

Qual a sua opinião?

Comentários considerados ofensivos serão moderados.

Parceiros

IBM
PagSeguro
Internet Innovation
Dialhost
HostNet
Tecla
KingHost
DotStore
Dinamize