2009/06/10

Acelerar o Javascript

Uma excelente apresentação de Nicholas C. Zakas (JavaScript guru que trabalha no Yahoo) nas Web Exponents do Google.



Nela são analisadas os problemas de performance do Javascript em quatro categorias distintas:

Scope Management: 
Sempre que se acede a uma variável, o motor do Javascript tem que procurar a variável no espaço local e depois no no espaço global. Usar variáveis locais, ou copiar uma variável global para uma local quando esta é usada várias vezes numa função acelera o vosso script.


Data Access:
Em JavaScript, os dados são acedidos de quatro formas: literais, variáveis, propriedades de objectos e items de arrays. Os literais e as variáveis são os mais rápidos de aceder. Portanto, justifica-se copiar propriedades para variáveis locais quando estas vão ser usadas múltiplas vezes.

Loops:
Os ciclos... pois... Os ciclos for-in e for each devem ser evitados ao máximo (na maior parte dos casos.) Embora sejam convenientes, a sua performance é pior que um ciclo "normal" for, while, do-while. O truque está em optimizar o que se encontra no interior do ciclo - e como vimos anteriormente, guardar os valores numa variável local em vez de se usar uma propriedade (como o tamanho - .length - de um array.)

DOM: 
E por último o DOM. No DOM são referidas várias técnicas que optimizar o acesso ao seus objectos HTMLCollection: document.images, document.forms, etc., assim como as funções getElementsByTagName() e getElementsByClassName() e usar o DocumentFragment para evitar múltiplos reflows da página.


Uma lição importante para todos os que trabalham com javascript, que a cada dia se torna mais importante e essencial... :)

2 comentários:

  1. Já deu para ver que o mais importante é sempre usar variáveis locais. Engraçado, algo que eu não faria [em qualquer linguagem] por achar que teria menos performance e para poupar memória :o)

    Hugz,
    Luís

    ResponderEliminar
  2. Claro que isto tudo poderá/deverá mudar em breve, à medidade que os motores javascript de nova geração começam a surgir e a optimizar muitos destes cenários.

    ResponderEliminar