<?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>The Blog of a WebDeveloper &#187; Acessibilidade</title>
	<atom:link href="http://joaopedropereira.com/blog/category/webdevelopment/acessibilidade/feed/" rel="self" type="application/rss+xml" />
	<link>http://joaopedropereira.com/blog</link>
	<description>Um novo estilo de desenvolvimento</description>
	<lastBuildDate>Sun, 19 Feb 2012 19:30:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Criar uma aplicação com boa Usabilidade: O quê? Porquê? Como?</title>
		<link>http://joaopedropereira.com/blog/2009/07/20/aplicacao-boa-usabilidade/</link>
		<comments>http://joaopedropereira.com/blog/2009/07/20/aplicacao-boa-usabilidade/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 23:38:31 +0000</pubDate>
		<dc:creator>João Pedro Pereira</dc:creator>
				<category><![CDATA[Acessibilidade]]></category>
		<category><![CDATA[Optimização]]></category>
		<category><![CDATA[Usabilidade]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[aplicação web]]></category>
		<category><![CDATA[design efficiency]]></category>
		<category><![CDATA[ergonomia]]></category>
		<category><![CDATA[interface web]]></category>

		<guid isPermaLink="false">http://joaopedropereira.com/blog/?p=389</guid>
		<description><![CDATA[O que é a Usabilidade? A Usabilidade é um termo utilizado para mostrar a facilidade de utilização e compreensão de uma interface, está directamente ligada à facilidade que o utilizador tem em alcançar os seus objectivos. A  o estudo da Usabilidade numa aplicação web é muito importante para tornar a aplicação web mais eficiente e [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F07%2F20%2Faplicacao-boa-usabilidade%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F07%2F20%2Faplicacao-boa-usabilidade%2F&amp;source=joaoppereira&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<h2>O que é a Usabilidade?</h2>
<p>A Usabilidade é um termo utilizado para mostrar a facilidade de utilização e compreensão de uma interface, está directamente ligada à facilidade que o utilizador tem em alcançar os seus objectivos.</p>
<p>A  o estudo da Usabilidade numa aplicação web é muito importante para tornar a aplicação web mais eficiente e produtiva! A Usabilidade está também intimamente relaccionada com a Acessibilidade de uma aplicação web e sua Optimização, e em casos não relaccionados com o assunto especifico de criação de uma aplicação web também são tidos em conta no estudo da Usabilidade aspectos como a ergonomia.</p>
<p>Podemos definir Usabilidade separando-a em vários componentes:</p>
<blockquote>
<ul>
<li>Learnability: How easy is it for users to accomplish basic tasks the first time they encounter the design?</li>
<li>Efficiency: Once users have learned the design, how quickly can they perform tasks?</li>
<li>Memorability: When users return to the design after a period of not using it, how easily can they reestablish proficiency?</li>
<li>Errors: How many errors do users make, how severe are these errors, and how easily can they recover from the errors?</li>
<li>Satisfaction: How pleasant is it to use the design?</li>
</ul>
</blockquote>
<p style="text-align: right;"><span style="text-decoration: underline;">Fonte:</span> <a title="Usability 101: Introduction to Usability" href="http://www.useit.com/alertbox/20030825.html" target="_blank">Usability 101: Introduction to Usability</a></p>
<h2>Porque devem ser feitos estudos de Usabilidade?</h2>
<p>Na criação de aplicações web um dos pontos que se deve ter sempre em mente durante a fase de desenho da interface é a Usabilidade da mesma, é necessário ver a <strong>Usabilidade como condição essêncial para qualquer interface</strong>! <span id="more-389"></span></p>
<p>Se uma interface web for de uso dificil, se fôr confusa, se não transmitir a mensagem chave da aplicação, se não permitir entender o que existe naquela aplicação, se for cansativa e mal organizada, entre outras questões, o visitante não irá continuar a navegar.</p>
<p>Salvo raras excepções, <strong>os visitantes não vão perder tempo a tentar entender a sua interface, se encontrarem alguma dificuldade na utilização da aplicação saem!</strong></p>
<p>Assim, podemos concluir que, quando presentes de uma interface com fraca Usabilidade (a Acessibilidade também entra nesta questão) o visitante não vai perder tempo e vai sair da página, deste modo, no caso de páginas de venda de produtos ou de promoção de empresas o volume de negócios vai ser bem menor do que o que seria com uma melhor interface. <strong>Um visitante não pode comprar algo que não encontra!</strong></p>
<p style="text-align: center;"><strong>Mais Usabilidade = Sucesso</strong></p>
<h2>Como verificar a Usabilidade de uma interface?</h2>
<p>Um erro muito comum nas pessoas que planeiam e desenham uma interface é esquecerem-se que os visitantes não sabem conhecem a interface aquando da sua primeira utilização, e como os visitantes caso tenham uma má experiência não voltam, é então imperativo que a aplicação seja testada por utilizadores não conhecedores do seu modo de funcionamento. Existem assim dois testes que podem ser realizados.</p>
<ol>
<li>A utilização de sistemas de tracking que permitam verificar tudo o que é feito pelos visitantes. Sabendo onde clicam, em que página desistem, quantos cliques necessitam para realizar uma tarefa, o tempo passado na página, etc. podendo inclusivé utilizar duas interfaces distintas (utilizar algum script para fazer alternar) de forma a ver qual das duas é melhor ao nível de Usabilidade, a que trouxer mais lucros (monetários ou não, dependo do sentido da aplicação) será à partida a de melhor Usabilidade</li>
<li>A escolha de um certo número de utilizadores que possam fazer o teste da aplicação e no fim pedir a opinião e sugestões aos mesmos.</li>
</ol>
<h2>Dicas para criar aplicações com boa Usabilidade</h2>
<p>As aplicações web:</p>
<ul>
<li>devem-se explicar a si mesmas</li>
<li>devem ser funcionais</li>
<li>devem ser optimizadas para um rápido feedback</li>
<li>devem sempre ter uma funcionalidade de pesquisa</li>
<li>devem permitir formar um sitemap mental a partir do menu principal</li>
<li>devem permitir realizar qualquer tarefa em, no máximo, 3 passos</li>
<li>devem ter conteúdo organizado e ligações para todas as áreas da aplicação</li>
<li>não devem fazer o visitante pensar</li>
<li>não devem fazer o visitante perder tempo</li>
<li>não devem ser confusas</li>
<li>não devem ter informação redundante</li>
<li>não devem induzir em erro</li>
<li>não devem ter um design inapropriado ou irritante</li>
</ul>
<h2>Opinião</h2>
<p>E vocês o que pensam relativamente a este tema? Que aspectos têm em conta na criação das interfaces dos vossos trabalhos e dos vossos projectos? Partilhem <img src='http://joaopedropereira.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<ul></ul>
<div class="shr-publisher-389"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F07%2F20%2Faplicacao-boa-usabilidade%2F' data-shr_title='Criar+uma+aplica%C3%A7%C3%A3o+com+boa+Usabilidade%3A+O+qu%C3%AA%3F+Porqu%C3%AA%3F+Como%3F'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F07%2F20%2Faplicacao-boa-usabilidade%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F07%2F20%2Faplicacao-boa-usabilidade%2F' data-shr_title='Criar+uma+aplica%C3%A7%C3%A3o+com+boa+Usabilidade%3A+O+qu%C3%AA%3F+Porqu%C3%AA%3F+Como%3F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://joaopedropereira.com/blog/2009/07/20/aplicacao-boa-usabilidade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Diminuir Load Times no Carregamento de Páginas Web</title>
		<link>http://joaopedropereira.com/blog/2009/04/03/optimizacao-websites/</link>
		<comments>http://joaopedropereira.com/blog/2009/04/03/optimizacao-websites/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 22:23:47 +0000</pubDate>
		<dc:creator>João Pedro Pereira</dc:creator>
				<category><![CDATA[Acessibilidade]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Optimização]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[parallel load]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://joaopedropereira.com/blog/?p=178</guid>
		<description><![CDATA[Um aspecto muito importante que é necessário ter em conta aquando do desenvolvimento de páginas web é a acessibilidade de uma página e do tempo que a página demora a estar pronta para ser utilizada, pois caso o tempo de carregamento (load time) seja elevado, os visitantes não vão gostar podendo até retroceder e não [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F04%2F03%2Foptimizacao-websites%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F04%2F03%2Foptimizacao-websites%2F&amp;source=joaoppereira&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Um aspecto muito importante que é necessário ter em conta aquando do desenvolvimento de páginas web é a acessibilidade de uma página e do tempo que a página demora a estar pronta para ser utilizada, pois caso o tempo de carregamento (load time) seja elevado, os visitantes não vão gostar podendo até retroceder e não voltar a essa página, logo load times elevados correspondem quase que directamente a visitantes / utilizadores / membros / clientes perdidos.</p>
<p style="text-align: center;"><strong>Tempo de carregamento baixo = &#8211; tempo perdido = utilizador contente</strong></p>
<p>Então podemos concluir que é necessário diminuir os tempos de carregamento das páginas e neste artigo vão ser abordadas várias formas de como reduzir os tempos de carregamento tendo em conta a optimização do JavaScript, do CSS, das imagens bem como optimização do lado do servidor nomeadamente com a utilização de PHP. <span id="more-178"></span></p>
<h2>JavaScript</h2>
<p>O JavaScript é uma linguagem que tem vindo, sucessivamente, a tornar-se cada vez mais popular entre os programadores de webservices pois tem aplicações desde a passagem de argumentos para o servidor sem ser necessário recarregar a página até aos efeitos que o JavaScript permite adicionar às páginas e seus elementos.  Mas, infelizmente, todas estas funcionalidades e coisas boas que o JavaScript traz tem um preço&#8230; Muitas vezes os ficheiros JavaScript tornam-se muito pesados, quer por serem bibliotecas como a jQuery, MooTools, dojo, ExtJS, etc. ou mesmo porque desenvolvemos grande parte da interface recorrendo a esta linguagem, o que vai adicionar centenas de kilobytes de informação às páginas. E o utilizador é exigente, quer páginas com tempos de carregamento baixos, mas também gosta de todas as facilidades e das interfaces que o JavaScript lhe proporciona. Assim, torna-se necessário, para não causar descontentamento no utilizador, correlacionar estes dois aspectos, é importante encontrar um ponto de equilibro.  Como encontrar um ponto de equilibro entre a utilização &#8220;massiva&#8221; de JavaScript e a exigência dos utilizadores?</p>
<h3>Conteúdo duplicado para quê?</h3>
<p>Sim, pode parecer óbvio que não se deve ter o mesmo script repetido na mesma página mas é algo que é muito comum e vai gerar dois pedidos HTTP por cada componente a descarregar e utilizar mais capacidade de processamento por parte do browser do utilizador, factores que levam a que a página demore mais tempo a ser carregada inutilmente. Verifique sempre se não tem conteúdo duplicado por acaso!  Uma outra solução é utilizar PHP, ou outra linguagem server-side, para adicionar os ficheiros JavaScript ao HTML e verificar se já foi adicionado ou não, tornando assim o código mais profissional e menos susceptivel a falhas e/ou faltas de atenção / verificação.</p>
<h3>Colocar os scripts no fundo da página</h3>
<p>O grande problema com os scripts é que os browsers não permitem descarregar mais nenhum componente externo enquanto está a descarregar um script.  Para optimizar o carregamento da página é então aconselhável que se movam os scripts para o fundo do body, no entanto, existem scripts que não podem ser movidos para o fundo pois passam conteúdo valioso para a página (por exemplo).  Uma solução alternativa é utilizar o atributo defer.</p>
<blockquote><p>&#8220;When set, this boolean attribute provides a hint to the user agent that the script is not going to generate any document content (e.g., no &#8220;document.write&#8221; in javascript) and thus, the user agent can continue parsing and rendering.&#8221; (<a title="Designing documents for user agents that support scripting" href="http://www.w3.org/TR/html4/interact/scripts.html#h-18.2" target="_blank">ver aqui</a>)</p></blockquote>
<p>Assim ao utilizar o atributo defer estamos a dizer ao browser que pode continuar a carregar a página e carregar o script apenas no fim. O que vai reduzir substancialmente o tempo de carregamento, tal como é pretendido.</p>
<h3>Descarregar ficheiros em paralelo</h3>
<p>Caso façamos uma introdução &#8220;normal&#8221; na nossa página de ficheiros JavaScript isso vai fazer com que os ficheiros sejam descarregados um de cada vez, diminuindo assim o tempo de carregamento da página.</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">(...)
&lt;script src=&quot;script1.js&quot; type=&quot;text/javascript&quot;&gt;&lt;!--mce:0--&gt;&lt;/script&gt;
&lt;script src=&quot;script2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;!--mce:1--&gt;&lt;/script&gt;
(...)</pre></div></div>

<p><img class="aligncenter size-medium wp-image-281" title="Not Parallel Download" src="http://joaopedropereira.com/blog/wp-content/uploads/2009/04/not_parallel-300x30.png" alt="Not Parallel Download" width="300" height="30" /></p>
<p>Utilizando a forma normal de inserir os scripts na página vai acontecer que o script2.js só começa a ser descarregado depois do script1.js estar completamente descarregado. Mas para quê esta espera se os acessos de hoje são de banda larga e suportam altas velocidades? Podemos descarregar ambos paralelamente, ao mesmo tempo.</p>
<p>Caso os ficheiros sejam descarregados de forma paralela o tempo de carregamento da página vai diminuir, e como podemos fazer isso? É tão simples como saber utilizar o document.write</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">(...)
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;&lt;!--</span>mce<span style="color: #339933;">:</span><span style="color: #CC0000;">2</span><span style="color: #339933;">--&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span>&lt;script src=&quot;script1.js&quot; type=&quot;text/javascript&quot;&gt;&lt;!--mce:3--&gt;&lt;/script&gt;&lt;script src=&quot;script2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;!--mce:4--&gt;&lt;/script&gt;
(...)</pre></div></div>

<p><img class="aligncenter size-medium wp-image-282" title="Parallel Download" src="http://joaopedropereira.com/blog/wp-content/uploads/2009/04/parallel-300x31.png" alt="Parallel Download" width="300" height="31" /></p>
<p>Como podemos observar, o segundo exemplo permite que os ficheiros sejam descarregados mais rápidamente pois o download é efectuado ao mesmo tempo. Para mais informações sobre downloads em paralelo continue a ler o artigo e na secção Server-Side este tema será novamente abordado.</p>
<h3>Ferramentas para a optimização de código JavaScript</h3>
<ul>
<li><a title="Javascript Compressor - compress code online for free" href="http://javascriptcompressor.com/" target="_blank">Javascript Compressor &#8211; compress code online for free</a></li>
<li><a title="YUI Compressor" href="http://developer.yahoo.com/yui/compressor/" target="_blank">YUI Compressor</a></li>
</ul>
<h2>CSS</h2>
<p>Todas as páginas web utilizam folhas de estilo (<a title="Mais Informações sobre CSS" href="http://pt.wikipedia.org/wiki/Cascading_Style_Sheets" target="_blank">CSS -Cascading Style Sheets</a>) e dependendo do design e da estrutura da folha de estilo esta pode ser maior ou menor mas em ambos os casos leva tempo a carregar e esse tempo deve, tal como nos outros pontos abordados neste artigo, de ser diminuido ao máximo! Além da validação sempre necessária vão ser apresentadas algumas formas de optimizar o código CSS. (<a title="CSS Validator" href="http://jigsaw.w3.org/css-validator/" target="_blank">validar CSS aqui</a>).</p>
<h3>Folhas de estilo no topo</h3>
<p>Colocar as folhas de estilo no topo da página faz com que as páginas possam carregar progressivamente e que o utilizador vá vendo o design a surgir. É muito importante dar aos utilizadores um feedback visual mal seja possível (<a title="Response Times: The Three Important Limits" href="http://www.useit.com/papers/responsetime.html" target="_blank">ver estudo aqui</a>), no caso de uma página web a estrutura da página é o nosso indicador de progressão no carregamento da página. Ao carregar a estrutura progressivamente da página (exemplo: header -&gt; menu -&gt; left sidebar -&gt; contéudo) tudo isto vai servir como feedback visual para o visitante que está à espera da página.  Caso as folhas de estilo aparecessem mais para o fim, o utilizador enquanto a página fosse carregando iria ter um visual sem estilo algum, sem uma ordem, e por isso pode facilmente desinteressar-se pela página.  É também uma especificação HTML dada pelo World Wide Web Consortium (<a title="Document relationships: the LINK element" href="http://www.w3.org/TR/html4/struct/links.html#h-12.3" target="_blank">ver aqui</a></p>
<p>).</p>
<h3>Optimizar o Código CSS</h3>
<p>Existem várias formas de se optimizar o código CSS sem reduzir de forma alguma as suas capacidades tornando apenas o código mais pequeno e mais conciso.  Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#div_xpto</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">padding-top</span><span style="color: #00AA00;">:</span><span style="color: #933;">15px</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">padding-bottom</span><span style="color: #00AA00;">:</span><span style="color: #933;">10px</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">padding-left</span><span style="color: #00AA00;">:</span><span style="color: #933;">13px</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">padding-right</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Neste exemplo podem ser feitas duas alterações de forma a optimizar o código.  Unir as componentes da propriedade padding na própria propriedade. A ordem é sempre  top, right, bottom, left (Menomónica possível: TR BL ou sentido dos ponteiros do relógio( Dica de: http://bit.ly/cY3W9G).</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#div_xpto</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #933;">15px</span> <span style="color: #933;">0px</span> <span style="color: #933;">10px</span> <span style="color: #933;">13px</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Em vez de utilizarmos 6 linhas utilizamos 1 linha, obtendo o mesmo efeito. Neste exemplo existe ainda outra modificação que podemos fazer que é a de retirar caracteres desnecessários.</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#div_xpto</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #933;">15px</span> <span style="color: #cc66cc;">0</span> <span style="color: #933;">10px</span> <span style="color: #933;">13px</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Como é possível verificar foi retirado depois do 0 os caracteres px porque 0 é uma medida igual quer em pt, px, em, etc. logo é tempo de carregamento (devido a ser um ficheiro menor) que ganhamos.  Caso as medidas padding-top e padding-bottom sejam iguais é possível utilizarmos algo assim: (consideremos as medidas top e bottom de 15px)</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#div_xpto</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #933;">15px</span> <span style="color: #cc66cc;">0</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Ou seja combinar a componente top e a componente bottom na mesma.  Também a nível do background (quase todos os websites utilizam esta propriedade) devem ser feitas optimizações:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">div <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">background-image</span><span style="color: #00AA00;">:</span><span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">&quot;fundo.jpg&quot;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#ffffff</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">background-repeat</span><span style="color: #00AA00;">:</span><span style="color: #993333;">repeat-x</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">background-position</span><span style="color: #00AA00;">:</span><span style="color: #000000; font-weight: bold;">top</span> <span style="color: #993333;">center</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Passa a:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">div <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span><span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">&quot;fundo.jpg&quot;</span><span style="color: #00AA00;">&#41;</span> <span style="color: #cc00cc;">#fff</span> <span style="color: #000000; font-weight: bold;">top</span> <span style="color: #993333;">center</span> <span style="color: #993333;">repeat-x</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Neste exemplo fizeram-se duas alterações, passaram-se as várias componentes do background tudo para a propriedade sem particionamento e a cor passou de #ffffff a #fff. Esta útlima alteração das cores também pode ser utilizada de forma a optimizar o código.  Se se definam cores utilizando o standard de 6 digitos este pode ser definido apenas por 3 digitos em certos casos. Como por exemplo:  Preto #000000 passa para #000 Branco #ffffff passa para #fff Verde #99ff33 passa para #9f3 Orange #ffcc00 passa para #fc0 Vermelho #ff3300 passa para #f30  Mas por exemplo #930f14 já não pode ser simplificada.  Esta técnica funciona para todas as cores seguras (<a title="Web Safe Colors Palette" href="http://www.lynda.com/resources/webpalette.aspx" target="_blank">ver aqui tabela</a>).  É também muito comum uma outra optmização a nível do código CSS que é combinar elementos. Se tivermos dois elementos que tenham certas caracteristicas iguais, então em vez de se definir duas vezes a mesma caracteristica define-se apenas uma vez englobando ambos os elementos o que torna o código mais limpo e mais leve. Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">p <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span><span style="color: #933;">13px</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#000</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.texto</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span><span style="color: #933;">13px</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#360</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Como podemos reparar as caracteristicas border, padding margin e font-size são idênticas quer na tag p quer na class .texto. Assim em vez de se definirem essas propriedades duas vezes podem ser definidas apenas uma:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">p<span style="color: #00AA00;">,</span> <span style="color: #6666ff;">.texto</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span><span style="color: #933;">13px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<h3>Ferramentas para Optimização de CSS</h3>
<ul>
<li><a title="CSS Drive - CSS Compressor" href="http://www.cssdrive.com/index.php/main/csscompressor" target="_blank">CSS Drive &#8211;  CSS Compressor</a></li>
<li><a title="Cascading Style Sheets Optimization" href="http://www.cssoptimiser.com/" target="_blank">Cascading Style Sheets Optimization</a></li>
<li><a title="Clean CSS" href="http://www.cleancss.com/" target="_blank">Clean CSS</a></li>
</ul>
<h3>Leitura complementar:</h3>
<ul>
<li><a title="CSS Sprites" href="http://www.alistapart.com/articles/sprites/" target="_blank">CSS Sprites</a></li>
</ul>
<h2>JavaScript / CSS</h2>
<h3>JavaScript e CSS em ficheiros externos</h3>
<p>Uma pergunta que se faz muitas vezes é se os ficheiros JavaScript e os ficheiros CSS devem estar em ficheiros à parte ou na própria página.  Utilizar ficheiros externos torna as páginas mais rápidas porque os ficheiros ficam na cache do browser equanto que se estiverem na página são descarregados sempre que é feito um pedido do documento, assim, ao utilizar ficheiros externos, reduz-se o tamanho da página mas aumenta-se o número de pedidos HTTP, contudo, os ficheiros externos ficam na cache do browser, logo diminui-se os pedidos HTTP e o tamanho da página utilizando ficheiros externos.  Além da optimização da página, utilizar ficheiros externos torna o código mais estruturado, mais fácilmente editável e mais limpo sendo então uma boa prática para manutenção da página.</p>
<h2>Imagens</h2>
<p>Os designs mais eye-candy com a utilização de vários icons para descrever serviços, os efeitos dos fundos, dos headers, dos footers, etc. utilizam bastantes imagens, maiores ou menores mas que, de qualquer modo, levam a que o tempo de carregamento da página seja maior.  E o que há fazer? São só imagens&#8230; Há alguns truques que podem ser utilizados para aumentar a velocidade de carregamento de imagens.</p>
<h3>Não redimensione imagens em HTML!</h3>
<p>Este ponto é de facto importante, muitas vezes carregam-se imagens, imaginemos, de 500x500px e depois em HTML definem-se medidas menores, isto é desnecessário e vai obrigar a que uma imagem maior seja carregada em vez de uma menor. Ou seja, em vez de se fazer algo assim</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;img src=&quot;image.png&quot; alt=&quot;Imagem xpto&quot; width=&quot;50px&quot; height=&quot;50px&quot; /&gt;</pre></div></div>

<p>com a imagem image.png a ter um tamanho de 500x500px deve-se ter</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;img src=&quot;image.png&quot; alt=&quot;Imagem xpto&quot; /&gt;</pre></div></div>

<p>tendo a imagem image.png o tamanho de 50x50px.</p>
<p>É também importante manter sempre as dimensões da imagem mesmo quando ela é exacta, isto é, no caso anterior mesmo já tendo a imagem 50x50px como queremos devemos indicar width=&#8221;50px&#8221; height=&#8221;50px&#8221; porque deste modo o browser não tem de &#8220;medir&#8221; a imagem antes de a colocar na página ficando então da seguinte forma:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;img src=&quot;image.png&quot; alt=&quot;Imagem xpto&quot; width=&quot;50px&quot; height=&quot;50px&quot; /&gt;</pre></div></div>

<p>Obrigado ao <a href="http://sergiolopes.name/" target="_blank">Sérgio Dinis Lopes</a> pela dica.</p>
<h3>favicon.ico pequeno e armazenável em cache</h3>
<p>O favicon.ico é uma pequena imagem que se encontra na raíz do servidor (normalmente).  É muitas vezes um problema porque mesmo não existindo o browser vai fazer um request à sua procura por isso é sempre bom ter uma para não se responder com um erro <a title="Descrição do Erro 404 Not Found" href="http://en.wikipedia.org/wiki/404_error" target="_blank">404 Not Found</a>.  Esta pequena imagem interfere também com a sequência de carregamento da página por exemplo no browser Internet Explorer enquanto que os scripts, css, imagens, etc são pedidos no onload event o favicon é pedido antes. <span style="text-decoration: underline;">Sugestões:</span></p>
<ul>
<li>Pequeno, de preferência com um máximo de ~1K (exemplos: wikipedia 318 bytes; google 1150 bytes; twitter 1406 bytes; wordpress 1150 bytes);</li>
<li>Defina o parâmetro Expires com um valor que ache mais correcto (4 meses é um valor aceitável tendo em conta que não se muda de favicon ferquentemente);</li>
</ul>
<h3>Escolher o Formato Correcto para as Imagens</h3>
<p>Existem vários formatos de imagens utilizados na construção de páginas web, entre elas destacam-se os formatos <a title="Mais Informações sobre o formato GIF" href="http://pt.wikipedia.org/wiki/Graphics_Interchange_Format" target="_blank">gif</a>, <a title="Mais Informações sobre o formato JPEG" href="http://www.w3.org/Graphics/JPEG/" target="_blank">jpeg</a>, <a title="Mais Informações sobre o formato PNG" href="http://www.w3.org/Graphics/PNG/" target="_blank">png</a> e é importante escolher para cada imagem qual o formato que melhor se lhe adequa fazendo com que imagens com menos pormenores, menos cores, etc. utilizem formatos mais leves (<a title="Página para ajudar na escolha dos Formatos de Imagem" href="http://www.yourhtmlsource.com/images/fileformats.html" target="_blank">ver mais informações aqui</a>).</p>
<h3>Leitura complementar:</h3>
<ul>
<li><a title="Image Optimization: Four Steps to File Size Reduction" href="http://yuiblog.com/blog/2008/11/14/imageopt-3/" target="_blank">Four Steps to File Size Reduction</a> por Stoyan Stefanov</li>
<li><a title="Image Optimization: Progressive JPEG…Hot or Not?" href="http://yuiblog.com/blog/2008/12/05/imageopt-4/" target="_blank">Progressive JPEG…Hot or Not?</a> por Stoyan Stefanov</li>
<li><a title="Host Images Files on Amazon S3 Storage" href="http://www.labnol.org/internet/host-images-files-on-amazon-s3-storage/" target="_blank">Alojar Imagens na Amazon</a> por Amit Agarwal</li>
</ul>
<h2>Server-Side</h2>
<p>Nos tempos de carregamento também interferem as acções do lado do servidor e por isso é necessário optimizar essas acções o máximo possível.</p>
<h3>Descarregar o buffer de saída mais cedo</h3>
<p>Quando uma página é pedida existe um intervalo de tempo em que o browser espera que o servidor junte o HTML e o envie para o browser. Durante este tempo o browser está inactivo à espera da resposta. A linguagem de programação <a title="PHP" href="http://www.php.net" target="_blank">PHP</a> tem uma função chamada <a title="PHP Função: Flush" href="http://pt2.php.net/manual/pt_BR/function.flush.php">flush</a> que permite que sejam enviadas respostas para o browser particionadas permitindo ao browser começar logo a carregar as informações recebidas enquanto o servidor continua a gerar o resto do HTML.</p>
<h3>Downloads em Paralelo</h3>
<p><span style="font-size: xx-small;">(imagens utilizadas neste subcapitulo retiradas <a title="Maximizing Parallel Downloads in the Carpool Lane" href="http://yuiblog.com/blog/2007/04/11/performance-research-part-4/" target="_blank">daqui</a>)</span></p>
<p style="text-align: left;">A especificação <a title="HTTP1/1" href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.1.4" target="_blank">HTTP/1.1</a> sugere que os browsers façam apenas dois downloads em paralelo de cada dominio assim caso todos os componentes estejam no mesmo dominio só poderão ser feitos dois downloads de cada vez aumentando muito o tempo que uma página demora a carregar.</p>
<blockquote>
<p style="text-align: left;">Clients that use persistent connections SHOULD limit the number of simultaneous connections that they maintain to a given server. A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy.</p>
</blockquote>
<p style="text-align: center;"><img class="size-medium wp-image-253 aligncenter" title="Dois Downloads em Paralelo" src="http://joaopedropereira.com/blog/wp-content/uploads/2009/04/two_parallel-300x192.gif" alt="Dois Downloads em Paralelo" width="300" height="192" /></p>
<p>Neste exemplo, estão representados 10 componentes extra na nossa página que precisam de ser descarregados, então se criarmos subdominios conseguimos optimizar o download dos componentes colocando-os a ser descarregados em paralelo.  Apesar de se poderem adicionar quantos sub-dominios quiserem às páginas não se devem utilizar mais do que 2-4 dominios devido ao tempo que demora a fazer a correspondência nos DNS (hostname &lt;-&gt; IP) e esta demora, normalmente, entre 20 e 120 millisegundos, enquanto isto acontece o browser não descarrega nada do dominio em questão.  E então como resolver a situação? O HTML fica no main-domain http://joaopedropereira.com/ e podem ser criados entre dois e quatro sub-dominios para as imagens content1.joaopedropereira.com e content2.joaopedropereira.com e (sub-dominios apenas com fins ilustrativos). <img class="aligncenter size-medium wp-image-258" title="Four Parallel Downloads" src="http://joaopedropereira.com/blog/wp-content/uploads/2009/04/four_parallel-300x192.gif" alt="Four Parallel Downloads" width="300" height="192" /> Assim conseguimos optimizar o tempo de carregamento das imagens e scripts da página. Neste exemplo foi possível poupar algum tempo, quanto mais scripts e imagens existirem mais diferença se fará notar no tempo de carregamento da página.</p>
<h4>Leitura Complementar</h4>
<ul>
<li><a title="Maximizing Parallel Downloads" href="http://yuiblog.com/blog/2007/04/11/performance-research-part-4/" target="_blank">Maximizing Parallel Downloads</a></li>
<li><a title="Host Images Files on Amazon S3 Storage" href="http://www.labnol.org/internet/host-images-files-on-amazon-s3-storage/" target="_blank">Alojar Imagens na Amazon</a> por Amit Agarwal</li>
<li><a title="Optimize Parallel Downloads to Minimize Object Overhead" href="http://www.websiteoptimization.com/speed/tweak/parallel/" target="_blank">Optimize Parallel Downloads to Minimize Object Overhead</a></li>
</ul>
<h3>Utilizar o método GET ou POST em AJAX?</h3>
<p>Ao utilizar XMLHttpRequest, o método POST consiste em dois processos separados de envio de informações, primeiro envia os cabeçalhos e só depois envia a informação enquanto que o método GET envia a informação de uma só vez (excepto se existirem muitos cookies).  Existe também limite no envio de informações utilizando o método GET pois este não foi feito para enviar grandes quantidades de informações.  Tal como os nomes indicam o método GET foi desenhado para pedir informações ao servidor enquanto que o método POST foi desenhado para enviar informações para o servidor.  Então qual deles escolher?  Na verdade não existe um melhor, existem dois métodos diferentes para situações diferentes e o que é melhor em determinada situação pode não o ser numa outra situação diferente. Então é necessário avaliar cada caso e escolher qual o método mais apropriado.</p>
<h4>Leitura Complementar</h4>
<ul>
<li><a title="Ajax: Get or Post" href="http://javascript.about.com/od/ajax/a/ajaxgp.htm" target="_blank">Ajax: Get or Post</a> por Stephen Chapman</li>
</ul>
<h2>Quer saber mais?</h2>
<p>Existem mais maneiras de optimizar um website mas que podem ser mais complexas ou mais dispendiosas, mas vou aqui deixar links para quem quiser estudar mais sobre este tema.</p>
<ul>
<li><a title="High Performance Web Sites" href="http://oreilly.com/catalog/9780596529307/preview.html" target="_blank">High Performance Web Sites</a> por Steve Souders</li>
<li><a title="How To Optimize Your Site With GZIP Compression" href="http://betterexplained.com/articles/how-to-optimize-your-site-with-gzip-compression/" target="_blank">How To Optimize Your Site With GZIP Compression</a></li>
</ul>
<div class="shr-publisher-178"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F04%2F03%2Foptimizacao-websites%2F' data-shr_title='Diminuir+Load+Times+no+Carregamento+de+P%C3%A1ginas+Web'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F04%2F03%2Foptimizacao-websites%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fjoaopedropereira.com%2Fblog%2F2009%2F04%2F03%2Foptimizacao-websites%2F' data-shr_title='Diminuir+Load+Times+no+Carregamento+de+P%C3%A1ginas+Web'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://joaopedropereira.com/blog/2009/04/03/optimizacao-websites/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>

