Otimizando Javascript e CSS da aplicação

setembro 22, 2010 at 5:39 pm 2 comentários

Andei pesquisando ultimamente sobre otimização de aplicações e web e encontrei algo que merece ser publicado, a redução do código Javascript e CSS. A idéia é transformar o código:

/*
Método que atualiza o valor de algum
atributo passado como parametro
*/
function updateField( field, value )
{
    //arqui entraria um comentário
	field.value = value;
	window.close();
	/* aqui vem outro
	 só que de bloco
	*/
}

Para:

function updateField(b,a){b.value=a;window.close()};

Esse pequeno pedaço de código já mostra uma diferença significativa, imagina agora para aqueles arquivos javascript enormes com todas as funções do seu sistema?
Se parar para analisar, os javascript que são fornecidos para Ajax, JQuery e coisas do gênero também fazem isso.
O Yahoo disponibiliza um jar (http://yuilibrary.com/downloads/#yuicompressor) que faz isso automático. Basta executar a linha de comando: java -jar yuicompressor-x.y.z.jar “nomeDoArquvo.js”, assim ele vai gerar na saída padrão o código reduzido. Com o parâmetro -o você escolhe o nome do novo arquivo a ser gerado.
Um problema de fazer isso durante o desenvolvimento é que se você precisar dar manutenção no código, esquece. Para resolver esse novo problema, eu fiz uma manutenção na target do build.xml que gera o EAR da aplicação. Ele faz um backup dos javascript, reduz todos os códigos e depois de gerar o WAR ele restaura os javascripts anteriores.

<!-- fazer o backup dos javascripts -->
<echo message="Criando a pasta de backup dos javascripts" />
<mkdir dir="${web.root.dir}/javascriptBackup" />
<echo message="Copiando os javascripts" />
<copy todir="${web.root.dir}/javascriptBackup">
	<fileset dir="${web.root.dir}/javascript/" />
</copy>

<!-- Minizando os javascripts -->
<echo message="Minimizando os javascripts" />
<taskdef name="for" classname="net.sf.antcontrib.logic.For" />
<for param="file">
	<path>
		<fileset dir="${web.root.dir}\javascript\" includes="*.js" />
	</path>
	<sequential>
		<apply executable="java" parallel="false">
			<fileset file="@{file}" />
			<arg line="-jar" />
			<arg line="ignorelib\yuicompressor-2.4.2.jar" />
			<arg line="-o" />
			<arg line="'@{file}'" />
			<arg line="'@{file}'" />
		</apply>

	</sequential>
</for>

<!-- Gerando o WAR ou EAR -->
<jar destfile="${build.result.folder}/${full.name}">
	<fileset dir="${web.root.dir}" includes="**/*.*" excludes="WEB-INF/classes/**/*.*" />
	<fileset dir="${web.root.dir}/../temp.folder" includes="**" />
	<manifest>
		<attribute name="Class-Path" value="${manifest.classpath}" />
	</manifest>
</jar>

<!-- Voltando o backup -->
<copy todir="${web.root.dir}/javascript" overwrite="true">
	<fileset dir="${web.root.dir}/javascriptBackup/" />
</copy>

<!-- Apagando o backup -->
<delete dir="${web.root.dir}/javascriptBackup/" />

Aqui só citei o caso do javascript, mas o CSS é da mesma forma.

[]‘s

Entry filed under: javascript, otimizacao. Tags: , , , , .

Comandos Oracle MySql Error 1005: Can’t create table (errno: 150) Problema Foreign Key

2 Comentários Add your own

  • 1. Thiago Montovaneli  |  setembro 22, 2010 às 7:47 pm

    O ganho em utilizar esse mecanismo, seria diminuir o tamanho total da página?

    Responder
    • 2. ovictorpinto  |  setembro 22, 2010 às 7:50 pm

      Sim. Diminui o tamanho do arquivo javascript/css enviado pelo servidor. É bem comum o javascript ficar guardado no cache do navegador, mas quando não cai no cache isso ajuda bastante.

      Responder

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Enviar trackback para este post  |  Subscribe to the comments via RSS Feed


Calendário

setembro 2010
S T Q Q S S D
« ago   jan »
 12345
6789101112
13141516171819
20212223242526
27282930  

Most Recent Posts


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.