Compactação JavaScript
Compactação javascript consiste na otimização de código, a fim de diminuir ao máximo o tamanho dos arquivos que o browser deverá fazer o download na hora que um usuário acessa um determinado site. Além de deixar uma página muito mais leve e rápida, os arquivos compactados ocuparão menos espaço no servidor também. Como JavaScript é uma linguagem interpretada, o que os compactadores fazem é aplicar técnicas especÃficas como nome de variáveis com poucos caracteres, tirar espaços desnecessários, comentários, etc.
Um método simples de compactação é feito com o JSMIN. O que ele faz é simplesmente tirar comentários e espaços em branco desnecessários. Segue uma demonstração da compactação feita pelo JSMIN:
<script type="text/javascript">
//TAMANHO: 932 bytes
// The -is- object is used to identify the browser. Every browser edition
// identifies itself, but there is no standard way of doing it, and some of
// the identification is deceptive. This is because the authors of web
// browsers are liars. For example, Microsoft's IE browsers claim to be
// Mozilla 4. Netscape 6 claims to be version 5.
var is = {
ie: navigator.appName == 'Microsoft Internet Explorer',
java: navigator.javaEnabled(),
ns: navigator.appName == 'Netscape',
ua: navigator.userAgent.toLowerCase(),
version: parseFloat(navigator.appVersion.substr(21)) ||
parseFloat(navigator.appVersion),
win: navigator.platform == 'Win32'
}
is.mac = is.ua.indexOf('mac') >= 0;
if (is.ua.indexOf('opera') >= 0) {
is.ie = is.ns = false;
is.opera = true;
}
if (is.ua.indexOf('gecko') >= 0) {
is.ie = is.ns = false;
is.gecko = true;
}
</script>
ficaria:
<script type="text/javascript">
// TAMANHO: 440 bytes
var is={ie:navigator.appName=='Microsoft Internet Explorer',java:navigator.javaEnabled(),ns:navigator.appName=='Netscape',ua:navigator.userAgent.toLowerCase(),version:parseFloat(navigator.appVersion.substr(21))||parseFloat(navigator.appVersion),win:navigator.platform=='Win32'}
is.mac=is.ua.indexOf('mac')>=0;if(is.ua.indexOf('opera')>=0){is.ie=is.ns=false;is.opera=true;}
if(is.ua.indexOf('gecko')>=0){is.ie=is.ns=false;is.gecko=true;}
</script>
Como podem ver, apenas uma lógica simples já diminuiu em pouco mais de 50%. Esse é objetivo do JSMIN. Mas ainda existe uma outra maneira de compactar mais ainda seu código.
Essa outra técnica consiste em pegar as palavras usadas repetidas, como “function”, “var”, “alert”, e usar em seu lugar, uma variável de nome pequeno, como a, b, c. Depois, é feito um eval desse resultado que, via expressão regulares, irão substituir os a, b, c por seus nomes originais como “function”, “var”, “alert”, etc. Para pequenos códigos, essa técnina não faz muita diferença, mas para grandes códigos é muito mais eficiente. O mesmo código do exemplo anterior compactado ficaria:
<script type="text/javascript">
eval(function(p,a,c,k,e,d){while(c--){if(k[c]){p=p.replace(new RegExp('\b'+c.toString(a)+'\b','g'),k[c])}}return p}('j 1={5:2.7=='m k i',g:2.h(),6:2.7=='l',3:2.u.s(),t:9(2.b.r(q))||9(2.b),n:2.o=='p'}1.a=1.3.4('a')>=0;d(1.3.4('c')>=0){1.5=1.6=e;1.c=8}d(1.3.4('f')>=0){1.5=1.6=e;1.f=8}',31,31,'|is|navigator|ua|indexOf|ie|ns|appName|true|parseFloat|mac|appVersion|opera|if|false|gecko|java|javaEnabled|Explorer|var|Internet|Netscape|Microsoft|win|platform|Win32|21|substr|toLowerCase|version|userAgent'.split('|')))
</script>
Neste caso ficou com 529 bytes. Mas experimente pegar grandes arquivos e passar essa compactação. Uso o framework MooTools e baixei uma versão compactada, e outra normal. A versão normal tem 140kb, já a compactada ficou com 49kb. Muita diferença neh. Só não esqueça de ao usar essas compactações javascript, sempre guarde a versão original do arquivo, pois muitas vezes o código fica ilegÃvel. Não é a toa que os compactadores são chamados também de ofuscadores.

Abril 30th, 2007 at 11:53
Olá, realmente o arquivo fica menor… Mas acredito que o processamento do browser para executar o JS será um pouco maior do que se executasse o código normal.
Seria interessante fazer um teste e verificar qual dos scripts roda mais rápido.
[]s
Gustavo
Abril 30th, 2007 at 11:56
Pois é, a função eval é uma função bem custosa de ser executada para o javascript. porém, daqui a pouco, o custo de executar o eval é bem menor, em questão de tempo, do que o tempo de baixar um arquivo bem menor. Teria que ver a necessidade. Certos casos não valem a pena. Mas para grandes implementações, acredito que seja uma boa alternativa. Boa observação. Valeu. Flw
Maio 21st, 2007 at 17:14
Pessoal neste caso é muito melhor e com muito mais efeito é a
utilização de compactação http. e todo o browser suporta esta
feature.
Maio 22nd, 2007 at 08:38
Acho que a compactação http é um complemento sobre esta.
Tendo em vista que esta provem menor massa de dados a ser transferida, e só então compactada para transferência (server X browser).
Julho 25th, 2007 at 22:55
Eu estou usando compactação de javascript da forma mais hard.
E realmente observei um processamento bem maior do brownser.
Porém, não tem como não usar na minha aplicação, pois recebo mais de 500.000 visitas por dia! Haja banda né!
Julho 30th, 2007 at 08:41
Olá, sou novo por aqui, começei assinar a RSS faz 1 semana e vim fazer meu primeiro post para agradecer pelo conteúdo. Minha área é design de interfaces web, mas não posso deixar de lado a programação, principalmente php/mysql e javascript que fazem parte do meu cotidiano de desenvolvimento e sempre procuro conteúdo ricos e mais uma vez parei por aqui. Abraço ao autor e aos visitantes. Obrigado!
Outubro 2nd, 2007 at 13:55
Olá, eu também sou novo nessacoisa de javra HI HI HIHI .
Mas quero aprender e tentei fazer uma contagem regressiva para o dia 12 de agosto de 2012 quando termina o Calendário Maia, e tudo saiu errado. Como eu faço.
grato
Neidsom
Outubro 3rd, 2007 at 09:17
Dá uma olhada nesse link:
http://gujs.com.br/blog/2007/04/contagem-regressiva/
flw
Novembro 28th, 2007 at 12:51
sera que alguem pode me ajuda a criar um projeto javaScript em eclipse????
preciso de ajuda terei uma prova amanha…se algm tiver disposto a me ajuda passo a passo tiver paciencia….passa o msn pra q eu adicione…POR FAVOR ME AJUDEEEEEEEEEEE…ahuahua
desde ja agradeço
Dezembro 17th, 2007 at 17:18
I’d prefer reading in my native language, because my knowledge of your languange is no so well. But it was interesting! Look for some my links:
Junho 24th, 2008 at 10:40
Existe algum script ou ferramenta que faça o trabalho inverso?
Estou com um código compactado mas preciso analisá-lo só que tá osso com essa versão compactada.