<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GUJS - Grupo de Usuários Javascript &#187; Frameworks e APIs</title>
	<atom:link href="http://gujs.com.br/blog/categoria/frameworks-e-apis/feed/" rel="self" type="application/rss+xml" />
	<link>http://gujs.com.br/blog</link>
	<description>O Maior Site Javascript do Brasil</description>
	<lastBuildDate>Tue, 27 Oct 2009 14:12:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Compactação JavaScript</title>
		<link>http://gujs.com.br/blog/2007/04/compactacao-javascript/</link>
		<comments>http://gujs.com.br/blog/2007/04/compactacao-javascript/#comments</comments>
		<pubDate>Mon, 30 Apr 2007 03:40:11 +0000</pubDate>
		<dc:creator>Rafael Quines</dc:creator>
				<category><![CDATA[Frameworks e APIs]]></category>
		<category><![CDATA[Tutoriais Básicos]]></category>
		<category><![CDATA[Técnicas]]></category>

		<guid isPermaLink="false">http://gujs.com.br/blog/2007/04/compactacao-javascript/</guid>
		<description><![CDATA[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 é [...]]]></description>
			<content:encoded><![CDATA[<p>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.<br />
<span id="more-21"></span><br />
Um método simples de compactação é feito com o <a href="http://www.crockford.com/javascript/jsmin.html">JSMIN</a>. 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:</p>
<pre class="prettyprint">
&lt;script type="text/javascript"&gt;
//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;
}
&lt;/script&gt;
</pre>
<p>ficaria:</p>
<pre class="prettyprint">
&lt;script type="text/javascript"&gt;
// 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;}
&lt;/script&gt;
</pre>
<p>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.</p>
<p>Essa <a href="http://joliclic.free.fr/php/javascript-packer/en/index.php">outra técnica</a> consiste em pegar as palavras usadas repetidas, como &#8220;function&#8221;, &#8220;var&#8221;, &#8220;alert&#8221;, 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 &#8220;function&#8221;, &#8220;var&#8221;, &#8220;alert&#8221;, 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:</p>
<pre class="prettyprint">
&lt;script type="text/javascript"&gt;
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('|')))
&lt;/script&gt;
</pre>
<p>Neste caso ficou com 529 bytes. Mas experimente pegar grandes arquivos e passar essa compactação. Uso o framework <a href="http://gujs.com.br/blog/2007/04/mootools-otimo-framework-javascript/">MooTools</a> 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.</p>
]]></content:encoded>
			<wfw:commentRss>http://gujs.com.br/blog/2007/04/compactacao-javascript/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>MooTools &#8211; Ótimo framework JavaScript</title>
		<link>http://gujs.com.br/blog/2007/04/mootools-otimo-framework-javascript/</link>
		<comments>http://gujs.com.br/blog/2007/04/mootools-otimo-framework-javascript/#comments</comments>
		<pubDate>Mon, 30 Apr 2007 03:06:01 +0000</pubDate>
		<dc:creator>Rafael Quines</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Cross-browser]]></category>
		<category><![CDATA[Frameworks e APIs]]></category>
		<category><![CDATA[Orientação à Objetos]]></category>

		<guid isPermaLink="false">http://gujs.com.br/blog/2007/04/mootools-otimo-framework-javascript/</guid>
		<description><![CDATA[MooTools é um framework javascript orientado a objetos. É muito fácil de usar e totalmente extensível, sendo simples para você criar suas classes usando recursos desse Frameworks. Baseado em Prototype, esse framework cria e sobrescreve métodos de objetos javascript já existentes, facilitando muito o seu uso.

Segue uma maneira muito simples de fazer uma requisição ajax [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mootools.net">MooTools</a> é um framework javascript orientado a objetos. É muito fácil de usar e totalmente extensível, sendo simples para você criar suas classes usando recursos desse Frameworks. Baseado em Prototype, esse framework cria e sobrescreve métodos de objetos javascript já existentes, facilitando muito o seu uso.<br />
<span id="more-22"></span><br />
Segue uma maneira muito simples de fazer uma requisição ajax usando o mootools:</p>
<pre class="prettyprint">
&lt;script src="mootools.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
    var url = "./inc/ajax_processa.php";
    var params = {operacao: 'excluiUsuario', idUsuario: '50'};
    /*
    o postBody pode receber tanto uma querystring
    ("operacao=excluiUsuario&#038;idUsuario=50"), um objeto,
    como no exemplo, ou então um elemento form
    */
    var myAjax = new Ajax(url, {method: 'post', postBody: params}).request();
&lt;/script&gt;
</pre>
<p>Além de Ajax, o MooTools tem muitos outros recursos. Por exemplo, para quem já precisou pegar o tamanho da janela, sabe que é um problema para ser cross-browser, usando document.documentElement.clientWidth ou document.body.clientWidth. Você não teria esse problema. Apenas dar o include no arquivo do mootools, e o objeto window terá dois novos métodos: getWidth() e getHeight(). Muito interessante neh.</p>
<p>Algumas funções auxiliares também foram adicionados nos objetos javascript, como o método &#8220;trim()&#8221; em todas as strings, métodos de conversão de QueryString para Objeto JSON e vice-versa. Arrays ganharam novos métodos como forEach, extend, associate, remove. Elementos ganharam também getParent(), getTag(), getValue(), injectBefore(), injectAfter(), e muito mais.</p>
<p>Ainda não explorei tanto, mas uma coisa que dá pra notar é que o framework se propõe a facilitar ainda mais o dia-a-dia com JavaScript. Por favor, gostaria que comentassem a opinião dos leitores sobre o Mootools. Para quem não conhece, vale a pena pelo menos dar uma olhada.</p>
]]></content:encoded>
			<wfw:commentRss>http://gujs.com.br/blog/2007/04/mootools-otimo-framework-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.938 seconds -->
