<?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>Ataraxia! &#187; internet</title>
	<atom:link href="http://www.ataraxia.com.br/posts/tag/internet/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ataraxia.com.br</link>
	<description>O estado da arte em TI</description>
	<lastBuildDate>Sun, 17 Jul 2011 21:36:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Envio de emails em massa</title>
		<link>http://www.ataraxia.com.br/posts/envio-de-emails-em-massa</link>
		<comments>http://www.ataraxia.com.br/posts/envio-de-emails-em-massa#comments</comments>
		<pubDate>Thu, 24 Dec 2009 17:01:11 +0000</pubDate>
		<dc:creator>Bruno Lustosa</dc:creator>
				<category><![CDATA[email]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.ataraxia.com.br/?p=367</guid>
		<description><![CDATA[Venho trabalhando em um projeto de envio de emails em massa, e como passei por muitos problemas para conseguir melhorar a taxa de entrega dos emails, queria compartilhar algumas dicas. Antes de mais nada, quero deixar bem claro: sou totalmente contra o SPAM. Por mim, podiam condenar cada spammer do mundo a uma morte bem [...]]]></description>
			<content:encoded><![CDATA[<p>Venho trabalhando em um projeto de envio de emails em massa, e como passei por muitos problemas para conseguir melhorar a taxa de entrega dos emails, queria compartilhar algumas dicas.<br />
Antes de mais nada, quero deixar bem claro: sou totalmente contra o <a href="http://pt.wikipedia.org/wiki/Spam">SPAM</a>. Por mim, podiam condenar cada spammer do mundo a <del datetime="2009-12-24T15:47:49+00:00">uma morte bem lenta e dolorosa</del> prisão. Hoje em dia, spam é um problema mundial, e boa parte dos problemas que precisamos enfrentar só existe porque existe spam. Por exemplo, não precisaríamos ficar nos preocupando em criar emails tomando todo tipo de cuidado com palavras e marcações se não existissem filtros antispam.<br />
Porem, assim como spammers fazem envio de email em massa (usando técnicas muitas vezes inescrupulosas), existem empresas que tem a necessidade legítima de fazer envio de emails em massa. Por exemplo, assinantes de um site podem querer receber uma newsletter semanal, ou um email com promoções de uma loja online. São usos aceitáveis, e a grande diferença entre email marketing e spam é que no primeiro caso houve o consentimento do usuário em receber o email.<br />
Enfim&#8230; agora que já deixei claro que esse artigo não tem a intenção de ajudar spammers, vamos aos pontos.</p>
<h2>IPs usados no envio</h2>
<p>Tente fazer os seus envios usando poucos endereços IPs, e que sejam consistentes. Se os seus emails estão saindo de vários IPs de redes diferentes, os servidores de destino podem achar que seu sistema está falsificando os IPs de envio, ou usando alguma rede para fazer o envio (botnets, por exemplo). Com isso, sua chance de ter o email marcado como spam aumenta bastante.<br />
Se você se limita a fazer o envio a partir de um único IP, ou poucos IPs, não vai sofrer com esse tipo de problema. Além disso, os provedores agora trabalham com o conceito de &#8220;reputação&#8221; de um IP. Ou seja, se você envia emails consistentemente através de um IP, e esses emails tem taxa de reclamação baixa, a tendência é que a reputação suba.</p>
<h2>DNS reverso</h2>
<p>O sistema de <acronym title="Domain Name System">DNS</acronym> serve para traduzir nomes para IPs. Por exemplo, quando digita &#8220;www.ataraxia.com.br&#8221; no seu navegador, ele é traduzido para um endereço IP (no momento em que escrevo, 75.119.213.142). Hoje em dia, o DNS é essencial para o funcionamento da Internet.<br />
Assim como existe a tradução de nomes para IPs, tambem existe a tradução inversa, ou seja, de IPs para nomes. E é importantíssimo que o endereço IP do seu servidor de email possa ser traduzido de volta para o nome dele.<br />
Servidores que não tem DNS reverso cadastrado e apontando de volta para ele mesmo normalmente não conseguem mandar email de forma consistente, pois a maior parte dos filtros já barra a conexão antes mesmo de receber a mensagem. Ou seja, o conteúdo nem mesmo é analisado.</p>
<h2>Use um remetente consistente</h2>
<p>O remetente é o nome e email que aparecem para quem recebe o email. Tente usar o mesmo para a campanha inteira. Colocar nomes e emails diferentes para cada email que sai é mais um indício de spam, pois spammers falsificam essas informações para tentar ocultar sua identidade. Coloque no remetente algo que deixe bem claro quem você é.</p>
<h2>Publique registros SPF</h2>
<p>O <acronym title="Sender Policy Framework">SPF</acronym> é um framework que utiliza registros DNS para divulgar informações sobre permissão de envio de emails, e tem a intenção de combater o envio de emails falsificados.<br />
Um registro SPF indica para o mundo quem tem permissão de mandar emails usando um domínio. E como quem tem controle sobre um domínio e seus registros é normalmente a organização detentora da marca, seria uma forma da organização dizer: &#8220;somente os servidores X, Y e Z podem mandar email usando minha marca&#8221;.<br />
Todos os grandes provedores checam registros SPF, e um email que falhe nessa checagem já é mais um indicativo de possível falsificação de email.<br />
Não vou colocar um tutorial sobre SPF nesse artigo, pois foge um pouco do escopo, mas para saber mais sobre a tecnologia, e como implementar, basta visitar o site <a href="http://www.openspf.org/">http://www.openspf.org/</a>. Existe tambem um ótimo <a href="http://old.openspf.org/wizard.html">assistente para geração do registro SPF</a> para publicação no servidor DNS.</p>
<h2>Assinaturas DomainKeys e DKIM</h2>
<p><a href="http://en.wikipedia.org/wiki/DomainKeys">DomainKeys</a> é uma tecnologia que usa criptografia para verificar o domínio de quem enviou a mensagem, e a integridade das mensagens. É usada principalmente pelo <a href="http://www.yahoo.com/">Yahoo!</a>, e foi usada como base pelo <acronym title="Internet Engineering Task Force">IETF</acronym> para o desenvolvimento do <a href="http://www.dkim.org/">DKIM</a> (DomainKeys Identified Mail), sucessor do DomainKeys.<br />
A idéia é usar duas chaves, uma pública e uma privada. A chave privada fica guardada no servidor que faz o envio, e cada email é assinado digitalmente usando essa chave privada. A chave pública é disponibilizada via DNS, e qualquer um que receba um email assinado usando a DomainKeys e/ou DKIM pode verificar se a mensagem foi realmente enviada por um servidor autorizado, checando a assinatura através da chave pública.<br />
Além disso, a assinatura garante também que a mensagem não foi modificada em trânsito, pois caso tenha sido modificada, a assinatura não vai conferir.<br />
Embora o DKIM tenha vindo para ser o sucessor do DomainKeys, a maior parte dos grandes provedores checam as duas assinaturas, então não existe problema em assinar a mensagem duas vezes, pois ambas coexistem sem problema.</p>
<h2>Lista de emails</h2>
<p>Qualquer email que esteja na sua lista deve ter dado a permissão explícita para que você faça o envio de emails. Qualquer inscrição deve preferencialmente utilizar o mecanismo de &#8220;double opt-in&#8221;, ou seja, a pessoa coloca seu email em um formulário no seu site, você envia um email de confirmação com um link, e só adiciona a pessoa na sua lista após essa confirmação. Isso evita a adição de pessoas que não pediram para ser cadastradas, e com isso, evita reclamações.</p>
<h2>Manutenção da lista</h2>
<p>A regra número 1 é bem simples: respeite seus usuários. Se alguem não quer mais receber seus emails, não envie mais. Vai ser um usuário a menos gerando reclamações. Não vale a pena forçar seus emails goela abaixo dos usuários.<br />
Todo email que você enviar deve conter um link para que o usuário possa sair da lista. Esse link deve funcionar, de preferência de forma automática e imediata.<br />
Além disso, qualquer email que gere um &#8220;bounce&#8221; deve ser removido da lista, caso seja um erro permanente (por exemplo, &#8220;email inexistente&#8221;). Erros não permanentes (por exemplo, &#8220;caixa postal cheia&#8221;) devem ser removidos caso persistam por alguns envios.</p>
<h2>Formato do email</h2>
<p>Todas as mensagens devem seguir o padrão descrito na <a href="http://tools.ietf.org/html/rfc5322">RFC 5322</a>. Esse padrão é o sucessor da <a href="http://tools.ietf.org/html/rfc2822">RFC 2822</a>, que por sua vez é o sucessor da <a href="http://tools.ietf.org/html/rfc822">RFC 822</a>. Esse padrão descreve o formato que um email deve seguir.<br />
Caso envie emails em HTML, siga os padrões descritos pelo <a href="http://www.w3c.org/">W3C</a>.<br />
Adicione sempre o cabeçalho &#8220;Precedence: bulk&#8221;, para sinalizar ao servidor de destino de que seu email faz parte de um envio em massa. Isso ajuda o servidor que recebe a priorizar melhor a entrega das mensagens, caso esteja sobrecarregado.<br />
O assunto do email deve ser relevante, e ter relação com o conteúdo da mensagem.</p>
<h2>O email em si</h2>
<p>Evite uso de palavras chaves normalmente associadas a spam. Evite o uso de pontuação em excesso, como por exemplo, muitas exclamações.<br />
Caso esteja enviando email em HTML, não esqueça de fazer tambem uma versão em texto puro, para quem não lê HTML. Por exemplo, muitos dispositivos móveis não lêem emails em HTML. Além disso, emails somente em HTML muitas vezes ganham uma pontuação nos sistemas antispam.<br />
No HTML, evite colocar somente imagens. Tente manter uma boa proporção de texto para imagem. Siga os padrões da W3C, colocando o atributo &#8220;alt&#8221; nas imagens. Além disso, lembre-se que por padrão, os grandes provedores não exibem imagens externas por padrão, então caso seu email contenha somente imagens, existe uma boa probabilidade do email não ser lido.</p>
<h2>Blacklists e whitelists</h2>
<p>Tente fazer monitoramento constante nas várias listas negras existentes na Internet. Caso seu servidor seja listado, começará a ter problemas de entrega, pois qualquer servidor configurado para checar a lista negra irá barrar sua conexão. Tente trabalhar de forma a evitar a entrada nessas listas, e caso entre, tente corrigir o problema e providenciar a saída o mais rápido possível.<br />
Assim como existem as listas negras, existem tambem listas brancas, de servidores que foram cuidadosamente verificados, e que fazem envio de email de forma responsável. A mais famosa é a certificação <a href="https://www.senderscore.org/">SenderScore</a> da <a href="http://www.returnpath.net/">ReturnPath</a>. Existe um custo, mas por sua vez, uma vez certificado, basta manter as boas práticas para conseguir melhores taxas de entrega para grandes provedores, como Hotmail e Yahoo!.</p>
<h2>Conclusão</h2>
<p>Resumindo: mandar emails para a Internet de forma consistente é um verdadeiro inferno hoje em dia. E acredite, você certamente terá problema de entregas uma hora ou outra. Não tem muito pra onde fugir. Mas seguindo essas regras (simples?), dá pra se manter o nível de rejeição em um patamar aceitável.<br />
Alguem tem alguma dica extra? Postem nos comentários!</p>
<h3  class="related_post_title">Artigos relacionados</h3><ul class="related_post"><li><a href="http://www.ataraxia.com.br/posts/evitando-spam-em-formularios" title="Evitando spam em formulários">Evitando spam em formulários</a></li><li><a href="http://www.ataraxia.com.br/posts/evitando-fornecer-seu-email-verdadeiro" title="Evitando fornecer seu email verdadeiro">Evitando fornecer seu email verdadeiro</a></li><li><a href="http://www.ataraxia.com.br/posts/otimizacao-de-sites-parte-2-compressao" title="Otimização de sites, parte 2 &#8211; Compressão">Otimização de sites, parte 2 &#8211; Compressão</a></li><li><a href="http://www.ataraxia.com.br/posts/otimizacao-em-php-parte-1-minify" title="Otimização em PHP, parte 1: Minify">Otimização em PHP, parte 1: Minify</a></li><li><a href="http://www.ataraxia.com.br/posts/acessando-sites-fora-do-ar" title="Acessando sites fora do ar">Acessando sites fora do ar</a></li><li><a href="http://www.ataraxia.com.br/posts/envio-de-emails-em-php" title="Envio de emails em PHP">Envio de emails em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/seguranca-no-envio-de-emails" title="Segurança no envio de emails em PHP">Segurança no envio de emails em PHP</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.ataraxia.com.br/posts/envio-de-emails-em-massa/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Otimização de sites, parte 2 &#8211; Compressão</title>
		<link>http://www.ataraxia.com.br/posts/otimizacao-de-sites-parte-2-compressao</link>
		<comments>http://www.ataraxia.com.br/posts/otimizacao-de-sites-parte-2-compressao#comments</comments>
		<pubDate>Tue, 10 Mar 2009 03:21:36 +0000</pubDate>
		<dc:creator>Bruno Lustosa</dc:creator>
				<category><![CDATA[dicas]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[otimização]]></category>

		<guid isPermaLink="false">http://www.ataraxia.com.br/?p=201</guid>
		<description><![CDATA[Como vimos no primeiro artigo da série sobre otimização em PHP, minimizar o número de conexões feitas pelo navegador é algo fundamental, pois muitas vezes perdemos mais tempo para estabelecer as conexões HTTP do que baixando o conteúdo propriamente dito. Porém, tão importante quanto minimizar o número de conexões, é ter certeza de que a [...]]]></description>
			<content:encoded><![CDATA[<p>Como vimos no <a href="http://www.ataraxia.com.br/posts/otimizacao-em-php-parte-1-minify">primeiro artigo da série sobre otimização em PHP</a>, minimizar o número de conexões feitas pelo navegador é algo fundamental, pois muitas vezes perdemos mais tempo para estabelecer as conexões <acronym title="HyperText Transfer Protocol">HTTP</acronym> do que baixando o conteúdo propriamente dito.</p>
<p>Porém, tão importante quanto minimizar o número de conexões, é ter certeza de que a quantidade de dados transferidos seja sempre a menor possível. Como vimos antes, o Minify já ajuda nesse sentido, pois retira dos scripts e das folhas de estilo caracteres desnecessários como espaços em branco e quebras de linha.</p>
<p>Este artigo não é específico de PHP, pois lida uma camada abaixo, direto no protocolo HTTP. As soluções apresentadas aqui podem ser implementadas diretamente na linguagem, mas ficam bem melhores se implementadas no servidor (Apache, no caso), como demonstrado neste artigo.</p>
<p>Começando com o HTTP 1.1, os navegadores podem especificar formas de codificação aceitáveis para o conteúdo, através do cabeçalho <em>Accept-Encoding</em>. Por exemplo, utilizando:</p>

<div class="wp_syntax"><div class="code"><pre class="http" style="font-family:monospace;">Accept-Encoding: gzip, deflate</pre></div></div>

<p>o navegador indica para o servidor web que pode receber o conteúdo solicitado de forma comprimida, utilizando um destes dois métodos (gzip ou deflate). Caso o servidor possa comprimir utilizando uma das formas solicitadas, irá retornar um cabeçalho <em>Content-Encoding</em>, informando a codificação usada, como por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="http" style="font-family:monospace;">Content-Encoding: gzip</pre></div></div>

<p>A codificação mais popular hoje em dia é o gzip, que é uma especificação aberta e bem documentada pela <a href="http://www.ietf.org/rfc/rfc1952.txt">RFC 1952</a>. A outra codificação (deflate) também pode ser usada, mas é menos popular e menos eficiente que o gzip.</p>
<p>A codificação gzip consegue comprimir conteúdo texto (HTML, CSS, JavaScript, e outros) em aproximadamente 70%. Levando-se em consideração que mais de 90% dos navegadores atualmente em uso suportam esta compressão, é altamente recomendável configurar o servidor web para comprimir arquivos texto.</p>
<p>Para o <a href="http://apache.httpd.org/">Apache</a>, dependerá da versão utilizada. O Apache 1.3 utiliza o <a href="http://sourceforge.net/projects/mod-gzip/">mod_gzip</a>, enquanto que o Apache 2.x usa o <a href="http://httpd.apache.org/docs/2.0/mod/mod_deflate.html">mod_deflate</a>. Como o Apache 1.3 já não é muito utilizado, vou mostrar os exemplos  para o mod_deflate.</p>
<p>Devemos levar em conta que somente arquivos texto devem ser comprimidos. Arquivos binários, como imagens, áudio e vídeo em geral já estão em um formato comprimido, e colocar mais compressão em cima, além de não diminuir o tamanho do arquivo (pelo contrário, as vezes até aumenta!), causa também desperdício de CPU para o servidor.</p>
<p>A configuração do mod_deflate em geral é feita especificando quais tipos de arquivo serão comprimidos. Em geral, arquivos texto devem ser comprimidos. Podemos, por exemplo, especificar que alguns tipos devem ser comprimidos utilizando diretivas de Apache como:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">SetOutputFilter</span> DEFLATE
<span style="color: #00007f;">AddOutputFilterByType</span> DEFLATE text/html text/plain text/xml text/css text/javascript text/x-json</pre></div></div>

<p>A primeira linha liga o mecanismo de compressão do mod_deflate, e a segunda especifica alguns tipos que devem ser comprimidos. No caso, estou informando ao servidor que arquivos tipo <acronym title="HyperText Markup Language">HTML</acronym>, texto puro, <acronym title="eXtensible Markup Language">XML</acronym>, <acronym title="Cascading Style Sheet">CSS</acronym>, JavaScript e <acronym title="JavaScript Object Notation">JSON</acronym> devem ser comprimidos. Alguns navegadores mais antigos podem ter problemas com a compressão gzip, mas felizmente isto é coisa do passado. De qualquer forma, a página com a documentação do mod_deflate mostra como desligar a compressão de acordo com o navegador usado.</p>
<p>Um bom site para se testar se o servidor está configurado corretamente para servir conteúdo comprimido é o <a href="http://whatsmyip.org/mod_gzip_test/">mod_gzip Test</a>. Basta colocar a <acronym title="Uniform Resource Locator">URL</acronym> do site e clicar em &#8220;Test&#8221; para saber se o servidor está preparado para servir conteúdo comprimido.</p>
<h3  class="related_post_title">Artigos relacionados</h3><ul class="related_post"><li><a href="http://www.ataraxia.com.br/posts/otimizacao-em-php-parte-1-minify" title="Otimização em PHP, parte 1: Minify">Otimização em PHP, parte 1: Minify</a></li><li><a href="http://www.ataraxia.com.br/posts/otimizacao-de-sites-parte-3-cache" title="Otimização de sites, parte 3 &#8211; Cache">Otimização de sites, parte 3 &#8211; Cache</a></li><li><a href="http://www.ataraxia.com.br/posts/envio-de-emails-em-massa" title="Envio de emails em massa">Envio de emails em massa</a></li><li><a href="http://www.ataraxia.com.br/posts/otimizacao-de-sites-com-memcached" title="Otimização de sites com memcached">Otimização de sites com memcached</a></li><li><a href="http://www.ataraxia.com.br/posts/otimizacao-imagens-inline" title="Otimização: imagens inline">Otimização: imagens inline</a></li><li><a href="http://www.ataraxia.com.br/posts/acessando-sites-fora-do-ar" title="Acessando sites fora do ar">Acessando sites fora do ar</a></li><li><a href="http://www.ataraxia.com.br/posts/paginas-de-manutencao" title="Páginas de manutenção">Páginas de manutenção</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.ataraxia.com.br/posts/otimizacao-de-sites-parte-2-compressao/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Otimização em PHP, parte 1: Minify</title>
		<link>http://www.ataraxia.com.br/posts/otimizacao-em-php-parte-1-minify</link>
		<comments>http://www.ataraxia.com.br/posts/otimizacao-em-php-parte-1-minify#comments</comments>
		<pubDate>Thu, 26 Feb 2009 04:13:37 +0000</pubDate>
		<dc:creator>Bruno Lustosa</dc:creator>
				<category><![CDATA[dicas]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[otimização]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.ataraxia.com.br/?p=196</guid>
		<description><![CDATA[Este é o primeiro artigo de uma série sobre otimização de páginas. Existem muitas técnicas que podemos utilizar pra melhorar o desempenho e o tempo de carregamento de uma página. Existem alguns fatores que influenciam no tempo de carregamento de uma página: Tamanho total dos dados Tempo de geração da página Número de conexões HTTP [...]]]></description>
			<content:encoded><![CDATA[<p>Este é o primeiro artigo de uma série sobre otimização de páginas. Existem muitas técnicas que podemos utilizar pra melhorar o desempenho e o tempo de carregamento de uma página.</p>
<p>Existem alguns fatores que influenciam no tempo de carregamento de uma página:</p>
<ul>
<li>Tamanho total dos dados</li>
<li>Tempo de geração da página</li>
<li>Número de conexões <acronym title="HyperText Transfer Protocol">HTTP</acronym> necessárias</li>
</ul>
<p>O tamanho total dos dados é de extrema importância, pois quanto mais dados pra se transferir (páginas, imagens, folhas de estilo, scripts externos, etc), maior o tempo de carregamento de uma página. O tempo de geração também é importante, e este tempo depende de uma programação eficiente e de um banco de dados rápido.</p>
<p>Porém, o número de conexões necessárias é frequentemente esquecido, e é um fator de extrema importância para que uma página seja carregada rapidamente.</p>
<p>Para entendermos o porque, precisamos saber o que o navegador faz quando pedimos para ele abrir uma página.</p>
<p>Primeiramente, é realizada uma consulta ao servidor <acronym title="Domain Name System">DNS</acronym> para se determinar o endereço do servidor que estamos tentando acessar. Esta consulta leva algum tempo, mas normalmente é cacheada pelo navegador uma vez feita. Num segundo passo, temos a primeira conexão, que baixa a página que foi pedida.</p>
<p>Após a busca da página, o navegador analisa sua estrutura, e busca elementos externos necessários, como imagens, folhas de estilo (<acronym title="Cascading Style Sheet">CSS</acronym>), scripts, arquivos de Flash, etc etc.</p>
<p>Cada elemento externo a ser baixado exige a abertura de mais uma conexão HTTP (nem sempre&#8230; existe pipelining e outras coisas que melhoram isso, mas pra simplificar, vou ignorar por enquanto). Cada conexão, para ser estabelecida, leva um tempo antes da transferência de dados ser iniciada. Este overhead gera um atraso, visto que muitas vezes, dependendo do tamanho do arquivo, o tempo para se estabelecer a conexão chega a ser maior que o tempo para se baixar o arquivo.</p>
<p>Some-se a isso uma regra que diz que navegadores devem abrir no máximo 2 conexões simultâneas por host. Ou seja, se a página possui 30 elementos externos a serem baixados, as conexões serão estabelecidas duas a duas até que os 30 sejam completados. Algo que se pode fazer para melhorar isto é dividir os elementos externos em alguns hosts diferentes, já que a regra manda 2 conexões <strong>por host</strong>, mas isto fica para mais adiante.</p>
<p>Muitas vezes, uma página possui vários arquivos CSS e vários scripts em JavaScript. Ao invés de utilizar, digamos, 5 tags para se carregar 5 arquivos CSS diferentes, e mais 10 tags para carregarmos 10 scripts externos, não seria muito melhor se pudéssemos abrir apenas duas conexões, e baixar todo o CSS em uma, e todo o JavaScript em outra? E melhor, que ao fazer isto eles já viessem &#8220;condensados&#8221;, de forma a diminuir seu tamanho?</p>
<p>Pois bem, a idéia do <a href="http://code.google.com/p/minify/">Minify</a> é justamente fazer isto. O Minify é um script em PHP que recebe uma lista de arquivos como parâmetro (CSS ou JavaScript) e &#8220;junta&#8221; todos eles em um único download (ele faz mais, mas para mais detalhes, veja direto na página do Minify).</p>
<p>Para fazer a instalação, tudo muito simples. Basta descompactar o arquivo na raiz do site, e fazer algumas modificações nas tags. Ao invés de termos:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/js/script1.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/js/script2.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/js/script3.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/js/script4.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/js/script5.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></pre></div></div>

<p>passamos a ter somente:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/min/?f=/js/script1.js,/js/script2.js,/js/script3.js,/js/script4.js,/js/script5.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></pre></div></div>

<p>Ou seja, chamamos somente o &#8220;/min/&#8221;, e passamos como parâmetro (chamado <b>f</b>) uma lista com os scripts, separados por vírgulas, e o Minify se encarrega do resto. Com o CSS, a mesma coisa. Ao invés de termos:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">link</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/css&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/css/style1.css&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">link</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/css&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/css/style2.css&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">link</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/css&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/css/style3.css&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">link</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/css&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/css/style4.css&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">link</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/css&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/css/style5.css&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span></pre></div></div>

<p>teremos somente:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">link</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/css&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/min/?f=/css/style1.css,/css/style2.css,/css/style3.css,/css/style4.css,/css/style5.css&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span></pre></div></div>

<p>Apenas usando o Minify, já podemos conseguir baixar o número de conexões HTTP necessárias para se carregar a página inteira, e com isso, diminuir o tempo total.</p>
<p>Um site interessante, que fornece um mapa com todos os elementos do site, assim como o tempo de carregamento de cada um é o <a href="http://tools.pingdom.com/">Full Page Test do Pingdom</a>. O tempo de cada elemento é dividido em 3: tempo para se começar, tempo para se estabelecer a conexão e a transferência em si. Olhando bem, dá pra perceber que o tamanho das páginas (parte azul da barra) tem uma influência menor do que o número de conexões.</p>
<p>Existem outras técnicas, que podem ser usadas em conjunto com o Minify para melhorar ainda mais, mas ficarão para os próximos artigos da série.</p>
<h3  class="related_post_title">Artigos relacionados</h3><ul class="related_post"><li><a href="http://www.ataraxia.com.br/posts/otimizacao-de-sites-parte-2-compressao" title="Otimização de sites, parte 2 &#8211; Compressão">Otimização de sites, parte 2 &#8211; Compressão</a></li><li><a href="http://www.ataraxia.com.br/posts/otimizacao-de-sites-parte-3-cache" title="Otimização de sites, parte 3 &#8211; Cache">Otimização de sites, parte 3 &#8211; Cache</a></li><li><a href="http://www.ataraxia.com.br/posts/agendando-eventos-no-wordpress" title="Agendando eventos no WordPress">Agendando eventos no WordPress</a></li><li><a href="http://www.ataraxia.com.br/posts/removendo-o-generator-do-wordpress" title="Removendo o &#8220;generator&#8221; do Wordpress">Removendo o &#8220;generator&#8221; do Wordpress</a></li><li><a href="http://www.ataraxia.com.br/posts/envio-de-emails-em-massa" title="Envio de emails em massa">Envio de emails em massa</a></li><li><a href="http://www.ataraxia.com.br/posts/escrevendo-plugins-para-o-wordpress" title="Escrevendo plugins para o Wordpress">Escrevendo plugins para o Wordpress</a></li><li><a href="http://www.ataraxia.com.br/posts/otimizacao-de-sites-com-memcached" title="Otimização de sites com memcached">Otimização de sites com memcached</a></li><li><a href="http://www.ataraxia.com.br/posts/evitando-sql-injection-em-php" title="Evitando SQL injection em PHP">Evitando SQL injection em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/otimizacao-imagens-inline" title="Otimização: imagens inline">Otimização: imagens inline</a></li><li><a href="http://www.ataraxia.com.br/posts/criando-captchas-em-php" title="Criando CAPTCHAs em PHP">Criando CAPTCHAs em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/pegadinhas-no-php" title="Pegadinhas no PHP">Pegadinhas no PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/precedencia-no-php" title="Precedência no PHP">Precedência no PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/acessando-sites-fora-do-ar" title="Acessando sites fora do ar">Acessando sites fora do ar</a></li><li><a href="http://www.ataraxia.com.br/posts/paginas-de-manutencao" title="Páginas de manutenção">Páginas de manutenção</a></li><li><a href="http://www.ataraxia.com.br/posts/imprimindo-em-formularios-continuos-em-php" title="Imprimindo em formulários contínuos em PHP">Imprimindo em formulários contínuos em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/xml-no-php-com-xml_serializer-parte-2-de-2" title="XML no PHP com XML_Serializer, parte 2 de 2">XML no PHP com XML_Serializer, parte 2 de 2</a></li><li><a href="http://www.ataraxia.com.br/posts/xml-no-php-com-xml_serializer-parte-1-de-2" title="XML no PHP com XML_Serializer, parte 1 de 2">XML no PHP com XML_Serializer, parte 1 de 2</a></li><li><a href="http://www.ataraxia.com.br/posts/envio-de-emails-em-php" title="Envio de emails em PHP">Envio de emails em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/validacao-de-dados-em-php" title="Validação de dados em PHP">Validação de dados em PHP</a></li><li><a href="http://www.ataraxia.com.br/posts/seguranca-no-envio-de-emails" title="Segurança no envio de emails em PHP">Segurança no envio de emails em PHP</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.ataraxia.com.br/posts/otimizacao-em-php-parte-1-minify/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Acessando sites fora do ar</title>
		<link>http://www.ataraxia.com.br/posts/acessando-sites-fora-do-ar</link>
		<comments>http://www.ataraxia.com.br/posts/acessando-sites-fora-do-ar#comments</comments>
		<pubDate>Tue, 27 Jan 2009 12:46:26 +0000</pubDate>
		<dc:creator>Bruno Lustosa</dc:creator>
				<category><![CDATA[dicas]]></category>
		<category><![CDATA[cdn]]></category>
		<category><![CDATA[internet]]></category>

		<guid isPermaLink="false">http://blog.ataraxia.com.br/?p=172</guid>
		<description><![CDATA[Volta e meia, tentamos acessar um site, e ele se encontra fora do ar por algum motivo: sobrecarga dos servidores, banco de dados fora do ar, problemas de conexão, ou duendes fazendo bagunça dentro das máquinas. Nesses casos, existem alguns artifícios que podem ser usados pra acessar o conteúdo do site. Um destes artifícios é [...]]]></description>
			<content:encoded><![CDATA[<p>Volta e meia, tentamos acessar um site, e ele se encontra fora do ar por algum motivo: sobrecarga dos servidores, banco de dados fora do ar, problemas de conexão, ou duendes fazendo bagunça dentro das máquinas. Nesses casos, existem alguns artifícios que podem ser usados pra acessar o conteúdo do site.</p>
<p>Um destes artifícios é usar um <acronym title="Content Distribution Network">CDN</acronym>, uma rede com servidores espalhados pelo mundo, que fazem cache de quase tudo na Internet.</p>
<p>Um CDN bastante popular é o <a href="http://www.coralcdn.org/">Coral CDN</a>. Pra usar, é bem fácil. Pegue o endereço do site que você deseja acessar, e coloque <strong>&#8220;.nyud.net&#8221;</strong> no final do nome do host.</p>
<p>Por exemplo, se o endereço que você está tentando acessar é o deste site (que acredito não estar fora do ar, já que você está lendo), bastaria pegar o endereço <a href="http://www.ataraxia.com.br/">http://www.ataraxia.com.br/</a> e transformar em <a href="http://www.ataraxia.com.br.nyud.net/">http://www.ataraxia.com.br<b>.nyud.net</b>/</a>.</p>
<p>Pronto, você vai ter acesso a uma &#8220;réplica&#8221; do site, e se a informação procurada já tiver sido cacheada, vai ser encontrada lá.</p>
<p>Outra opção, que também está disponível, é verificar se o Google possui a página em cache. Isso é bem fácil. Basta colocar a <acronym title="Uniform Resource Locator">URL</acronym> do site na busca do Google, e ao invés de clicar no link para o site, clicar logo abaixo, onde aparece <em>&#8220;Em Cache&#8221;</em>. Este link te levará para o cache que o Google tem da página em questão, da última vez em que a visitou. Um problema nisso é que normalmente as imagens não são cacheadas, e se o site estiver fora do ar, as imagens não serão carregadas. Mas não deixa de ser uma alternativa, caso o CDN falhe.</p>
<h3  class="related_post_title">Artigos relacionados</h3><ul class="related_post"><li><a href="http://www.ataraxia.com.br/posts/envio-de-emails-em-massa" title="Envio de emails em massa">Envio de emails em massa</a></li><li><a href="http://www.ataraxia.com.br/posts/otimizacao-de-sites-parte-2-compressao" title="Otimização de sites, parte 2 &#8211; Compressão">Otimização de sites, parte 2 &#8211; Compressão</a></li><li><a href="http://www.ataraxia.com.br/posts/otimizacao-em-php-parte-1-minify" title="Otimização em PHP, parte 1: Minify">Otimização em PHP, parte 1: Minify</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.ataraxia.com.br/posts/acessando-sites-fora-do-ar/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

