{"id":2975,"date":"2014-09-09T21:21:21","date_gmt":"2014-09-09T21:21:21","guid":{"rendered":"http:\/\/www.deuzebranaweb.com.br\/?p=2975"},"modified":"2014-09-09T21:21:21","modified_gmt":"2014-09-09T21:21:21","slug":"otimizando-performance-com-compactacao-gzipdeflate","status":"publish","type":"post","link":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/2014\/09\/09\/otimizando-performance-com-compactacao-gzipdeflate\/","title":{"rendered":"Otimizando Performance com Compacta\u00e7\u00e3o Gzip\/Deflate"},"content":{"rendered":"<div class=\"wrapper\">\n<header class=\"header clear\">\n<div id=\"logo-wrapper\">\n<h1><a title=\"Otimizando Performance com Compacta\u00e7\u00e3o Gzip\/Deflate\" href=\"http:\/\/blog.glaucocustodio.com\/2012\/09\/22\/otimizando-performance-com-compactacao-gzip-deflate\/\">Otimizando Performance com Compacta\u00e7\u00e3o Gzip\/Deflate<\/a><\/h1>\n<\/div>\n<\/header>\n<section>\n<article id=\"post-479\" class=\"post-479 post type-post status-publish format-standard hentry category-servidor tag-apache tag-gzip tag-servidor-2\">Fala pessoal, beleza?<\/p>\n<p>Hoje estou aqui para falar de um assunto que pode n\u00e3o ser muito conhecido por alguns, que \u00e9 a <strong>compacta\u00e7\u00e3o gzip\/deflate<\/strong>.<\/p>\n<p>Essa t\u00e9cnica, nada mais \u00e9 do que a compacta\u00e7\u00e3o dos arquivos solicitados pelo navegador (browser) antes deles serem enviados pelo servidor.<\/p>\n<p><a href=\"http:\/\/blog.glaucocustodio.com\/2012\/09\/22\/otimizando-performance-com-compactacao-gzip-deflate\/\"><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone  wp-image-490\" title=\"gzip-deflate-compression\" src=\"http:\/\/blog.glaucocustodio.com\/wp-content\/uploads\/2012\/09\/gzip-deflate-compression.jpg\" alt=\"gzip-deflate-compression\" width=\"580\" height=\"240\" \/><\/a><\/p>\n<h2><span id=\"more-479\"><\/span>Fluxo de Requisi\u00e7\u00e3o e Resposta HTTP<\/h2>\n<p>Primeiro vou come\u00e7ar explicando como funciona quando fazemos uma requisi\u00e7\u00e3o sem utilizar essa compacta\u00e7\u00e3o, veja a imagem abaixo.<\/p>\n<p><a href=\"http:\/\/blog.glaucocustodio.com\/wp-content\/uploads\/2012\/09\/fluxo-de-requisi%C3%A7%C3%A3o-e-resposta-HTTP.gif\"><img decoding=\"async\" class=\"alignnone size-full wp-image-482\" title=\"fluxo-de-requisi\u00e7\u00e3o-e-resposta-HTTP\" src=\"http:\/\/blog.glaucocustodio.com\/wp-content\/uploads\/2012\/09\/fluxo-de-requisi%C3%A7%C3%A3o-e-resposta-HTTP.gif\" alt=\"fluxo-de-requisi\u00e7\u00e3o-e-resposta-HTTP\" width=\"550\" height=\"250\" \/><\/a><\/p>\n<p>Vamos supor que temos um arquivo CSS em nosso site (http:\/\/site.com.br), atrav\u00e9s do HTML abaixo:<\/p>\n<div class=\"pygment code\">\n<div class=\"highlight\">\n<pre><span class=\"nt\">&lt;link<\/span> <span class=\"na\">rel=<\/span><span class=\"s\">\"stylesheet\"<\/span> <span class=\"na\">href=<\/span><span class=\"s\">\"estilo.css\"<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"text\/css\"<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/pre>\n<\/div>\n<\/div>\n<ol>\n<li>navegador solicita o arquivo <code>estilo.css<\/code> ao servidor<\/li>\n<li>servidor encontra o arquivo e l\u00ea<\/li>\n<li>servidor retorna o arquivo com c\u00f3digo 200 (OK)<\/li>\n<li>navegador exibe o resultado da p\u00e1gina aplicada com o estilo CSS<\/li>\n<\/ol>\n<h2>Otimizando<\/h2>\n<p>Acima temos o fluxo de uma requisi\u00e7\u00e3o HTTP, funciona muito bem, mas podemos otimizar usando compacta\u00e7\u00e3o, veja.<\/p>\n<p><a href=\"http:\/\/blog.glaucocustodio.com\/wp-content\/uploads\/2012\/09\/fluxo-de-requisi%C3%A7%C3%A3o-e-resposta-HTTP-com-compactacao.gif\"><img decoding=\"async\" class=\"alignnone size-full wp-image-484\" title=\"fluxo-de-requisi\u00e7\u00e3o-e-resposta-HTTP-com-compactacao\" src=\"http:\/\/blog.glaucocustodio.com\/wp-content\/uploads\/2012\/09\/fluxo-de-requisi%C3%A7%C3%A3o-e-resposta-HTTP-com-compactacao.gif\" alt=\"fluxo-de-requisi\u00e7\u00e3o-e-resposta-HTTP-com-compactacao\" width=\"560\" height=\"250\" \/><\/a><\/p>\n<ol>\n<li>navegador solicita o arquivo <code>estilo.css<\/code> dizendo que aceita compacta\u00e7\u00e3o gzip<\/li>\n<li>servidor encontra o arquivo e compacta (aqui est\u00e1 a \u201cm\u00e1gica\u201d)<\/li>\n<li>servidor responde com o arquivo compactado<\/li>\n<li>navegador descompacta, e exibe a p\u00e1gina com estilo aplicado<\/li>\n<\/ol>\n<p>Bem simples n\u00e9? Agora inv\u00e9s de fazermos download de um arquivo de 70KB, baixamos apenas 5KB pois usamos a compress\u00e3o. \u00c9 uma economia incr\u00edvel..<\/p>\n<h2>Ativando compress\u00e3o no Apache<\/h2>\n<p>Como j\u00e1 sabemos o que \u00e9 a compacta\u00e7\u00e3o e seu benef\u00edcio, vamos colocar em pr\u00e1tica ativando ela no servidor web Apache.<\/p>\n<p>O Apache tem duas formas de compress\u00e3o, <code>mod_deflate<\/code> e <code>mod_gzip<\/code> (ambos s\u00e3o m\u00f3dulos), irei usar <code>mod_deflate<\/code> por ser mais simples e mais utilizado, mas fica a seu crit\u00e9rio. Para isso precisamos ativar o m\u00f3dulo, caso voc\u00ea esteja no Ubuntu, execute o comando <code>sudo a2enmod deflate<\/code> e pronto, se voc\u00ea usa Windows com WAMP, basta iniciar o gerenciador do <code>WAMP -&gt; Apache -&gt; M\u00f3dulos -&gt; mod_deflate<\/code>, pronto! N\u00e3o esque\u00e7a de reiniciar o Apache ap\u00f3s a ativa\u00e7\u00e3o..<\/p>\n<p>Vou usar meu site (<a title=\"http:\/\/glaucocustodio.com\" href=\"http:\/\/glaucocustodio.com\/\" target=\"_blank\">http:\/\/glaucocustodio.com<\/a>) como exemplo pr\u00e1tico para ativar a compacta\u00e7\u00e3o. Abaixo temos uma imagem que mostra uma requisi\u00e7\u00e3o ao arquivo<code>jquery.js<\/code> sendo feita sem compacta\u00e7\u00e3o gzip\/deflate, temos que fazer download de 91.7KB.<a href=\"http:\/\/blog.glaucocustodio.com\/wp-content\/uploads\/2012\/09\/analise-de-requisi%C3%A7%C3%A3o-sem-compacta%C3%A7%C3%A3o.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-488\" title=\"analise-de-requisi\u00e7\u00e3o-sem-compacta\u00e7\u00e3o\" src=\"http:\/\/blog.glaucocustodio.com\/wp-content\/uploads\/2012\/09\/analise-de-requisi%C3%A7%C3%A3o-sem-compacta%C3%A7%C3%A3o.gif\" alt=\"analise-de-requisi\u00e7\u00e3o-sem-compacta\u00e7\u00e3o\" width=\"862\" height=\"411\" \/><\/a><\/p>\n<p>Como j\u00e1 sei que no servidor de meu site o <code>mod_deflate<\/code> j\u00e1 est\u00e1 ativo, adiciono o c\u00f3digo abaixo no arquivo <code>.htaccess<\/code> na raiz do meu site para ativar a compacta\u00e7\u00e3o.<\/p>\n<div class=\"pygment code\">\n<div class=\"highlight\">\n<pre><span class=\"nt\">&lt;IfModule<\/span> <span class=\"s\">mod_deflate.c<\/span><span class=\"nt\">&gt;<\/span>\n<span class=\"c\"># Insert filter<\/span>\n<span class=\"nb\">AddOutputFilterByType<\/span> DEFLATE text\/plain\n<span class=\"nb\">AddOutputFilterByType<\/span> DEFLATE text\/xml\n<span class=\"nb\">AddOutputFilterByType<\/span> DEFLATE application\/xhtml+xml\n<span class=\"nb\">AddOutputFilterByType<\/span> DEFLATE text\/css\n<span class=\"nb\">AddOutputFilterByType<\/span> DEFLATE application\/xml\n<span class=\"nb\">AddOutputFilterByType<\/span> DEFLATE image\/svg+xml\n<span class=\"nb\">AddOutputFilterByType<\/span> DEFLATE application\/rss+xml\n<span class=\"nb\">AddOutputFilterByType<\/span> DEFLATE application\/atom_xml\n<span class=\"nb\">AddOutputFilterByType<\/span> DEFLATE application\/x-javascript\n<span class=\"nb\">AddOutputFilterByType<\/span> DEFLATE application\/javascript\n<span class=\"nb\">AddOutputFilterByType<\/span> DEFLATE application\/x-httpd-php\n<span class=\"nb\">AddOutputFilterByType<\/span> DEFLATE application\/x-httpd-fastphp\n<span class=\"nb\">AddOutputFilterByType<\/span> DEFLATE application\/x-httpd-eruby\n<span class=\"nb\">AddOutputFilterByType<\/span> DEFLATE text\/html\n\n<span class=\"nb\">SetOutputFilter<\/span> DEFLATE\n\n<span class=\"c\"># Netscape 4.x has some problems...<\/span>\n<span class=\"nb\">BrowserMatch<\/span> ^Mozilla\/4 gzip-only-text\/html\n\n<span class=\"c\"># Netscape 4.06-4.08 have some more problems<\/span>\n<span class=\"nb\">BrowserMatch<\/span> ^Mozilla\/4.0[678] no-gzip\n\n<span class=\"c\"># MSIE masquerades as Netscape, but it is fine<\/span>\n<span class=\"c\"># BrowserMatch \bMSIE !no-gzip !gzip-only-text\/html<\/span>\n\n<span class=\"c\"># NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48<\/span>\n<span class=\"c\"># the above regex won't work. You can use the following<\/span>\n<span class=\"c\"># workaround to get the desired effect:<\/span>\n<span class=\"nb\">BrowserMatch<\/span> \bMSI[E] !no-gzip !gzip-only-text\/html\n\n<span class=\"c\"># Don't compress images<\/span>\n<span class=\"nb\">SetEnvIfNoCase<\/span> Request_URI \n.<span class=\"err\">(?:gif|jpe?g|png)$<\/span> <span class=\"err\">no-<\/span><span class=\"nb\">gzip<\/span> dont-vary\n<span class=\"nt\">&lt;\/IfModule&gt;<\/span>\n<\/pre>\n<\/div>\n<\/div>\n<p>Esse c\u00f3digo verifica se o m\u00f3dulo deflate est\u00e1 ativo (<code>IfModule<\/code>), define compacta\u00e7\u00e3o deflate por tipos atrav\u00e9s das linhas <code>AddOutputFilterByType..<\/code>, garante que navegadores antigos (como Netscape 1.0) n\u00e3o ter\u00e3o compacta\u00e7\u00e3o (pois n\u00e3o suportam a descompress\u00e3o) e evita que imagens sejam comprimidas pois a maioria delas j\u00e1 s\u00e3o e n\u00e3o tem necessidade (assim como v\u00eddeos e arquivos de \u00e1udios).<\/p>\n<p>Ap\u00f3s subir o arquivo no servidor e analisar as requisi\u00e7\u00f5es, veja o que temos.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/blog.glaucocustodio.com\/wp-content\/uploads\/2012\/09\/analise-de-requisi%C3%A7%C3%A3o-com-compacta%C3%A7%C3%A3o.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-487\" title=\"analise-de-requisi\u00e7\u00e3o-com-compacta\u00e7\u00e3o\" src=\"http:\/\/blog.glaucocustodio.com\/wp-content\/uploads\/2012\/09\/analise-de-requisi%C3%A7%C3%A3o-com-compacta%C3%A7%C3%A3o.gif\" alt=\"analise-de-requisi\u00e7\u00e3o-com-compacta\u00e7\u00e3o\" width=\"873\" height=\"415\" \/><\/a><\/p>\n<div class=\"note\">N\u00e3o esque\u00e7a de limpar o cache do navegador para ver o resultado.<\/div>\n<p>Observe a linha <code>Content-Encoding<\/code> e veja que a compacta\u00e7\u00e3o <code>deflate\/gzip<\/code> est\u00e1 ativa agora e o mais impressionante \u00e9 o tamanho do arquivo baixado, apenas 32.4KB, ou seja, reduzimos 2\/3 do peso do arquivo apenas com essa t\u00e9cnica..<\/p>\n<p>Espero que tenha ajudado e sido claro nesse tutorial.. O que voc\u00eas acharam?<\/p>\n<p>At\u00e9 mais!<\/p>\n<div id=\"author-bio-box\"><\/div>\n<div id=\"html-share-buttons\"><a href=\"http:\/\/www.facebook.com\/sharer.php?u=http:\/\/blog.glaucocustodio.com\/2012\/09\/22\/otimizando-performance-com-compactacao-gzip-deflate\/\" target=\"_blank\"><img decoding=\"async\" src=\"http:\/\/www.simplesharebuttons.com\/images\/somacro\/facebook.png\" alt=\"Facebook\" \/><\/a> <a href=\"http:\/\/twitter.com\/share?url=http:\/\/blog.glaucocustodio.com\/2012\/09\/22\/otimizando-performance-com-compactacao-gzip-deflate\/&amp;text=Otimizando%20Performance%20com%20Compacta%C3%A7%C3%A3o%20Gzip\/Deflate&amp;hashtags=JustCode\" target=\"_blank\"><img decoding=\"async\" src=\"http:\/\/www.simplesharebuttons.com\/images\/somacro\/twitter.png\" alt=\"Twitter\" \/><\/a> <a href=\"https:\/\/plus.google.com\/share?url=http:\/\/blog.glaucocustodio.com\/2012\/09\/22\/otimizando-performance-com-compactacao-gzip-deflate\/\" target=\"_blank\"><img decoding=\"async\" src=\"http:\/\/www.simplesharebuttons.com\/images\/somacro\/google.png\" alt=\"Google\" \/><\/a> <a href=\"http:\/\/reddit.com\/submit?url=http:\/\/blog.glaucocustodio.com\/2012\/09\/22\/otimizando-performance-com-compactacao-gzip-deflate\/&amp;title=Otimizando%20Performance%20com%20Compacta%C3%A7%C3%A3o%20Gzip\/Deflate\" target=\"_blank\"><img decoding=\"async\" src=\"http:\/\/www.simplesharebuttons.com\/images\/somacro\/reddit.png\" alt=\"Reddit\" \/><\/a> <a href=\"mailto:?Subject=Otimizando%20Performance%20com%20Compacta%C3%A7%C3%A3o%20Gzip\/Deflate&amp;Body=http:\/\/blog.glaucocustodio.com\/2012\/09\/22\/otimizando-performance-com-compactacao-gzip-deflate\/\"><img decoding=\"async\" src=\"http:\/\/www.simplesharebuttons.com\/images\/somacro\/email.png\" alt=\"Email\" \/><\/a><\/div>\n<div class=\"comments\">\n<ul>\n<li id=\"comment-37\" class=\"comment even thread-even depth-1\">\n<div id=\"div-comment-37\" class=\"comment-body\">\n<p>&nbsp;<\/p>\n<\/div>\n<\/li>\n<li id=\"comment-735\" class=\"comment odd alt thread-odd thread-alt depth-1\">\n<div id=\"div-comment-735\" class=\"comment-body\"><\/div>\n<\/li>\n<\/ul>\n<div id=\"comment-form-wrapper\">\n<div id=\"respond\">\n<h3 id=\"reply-title\">http:\/\/blog.glaucocustodio.com\/2012\/09\/22\/otimizando-performance-com-compactacao-gzip-deflate\/<\/h3>\n<\/div>\n<\/div>\n<\/div>\n<\/article>\n<\/section>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Otimizando Performance com Compacta\u00e7\u00e3o Gzip\/Deflate Fala pessoal, beleza? Hoje estou aqui para falar de um assunto que pode n\u00e3o ser muito conhecido por alguns, que \u00e9 a compacta\u00e7\u00e3o gzip\/deflate. Essa t\u00e9cnica, nada mais \u00e9 do que a compacta\u00e7\u00e3o dos arquivos solicitados pelo navegador (browser) antes&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_angie_page":false,"page_builder":"","footnotes":""},"categories":[5,6,7],"tags":[],"class_list":["post-2975","post","type-post","status-publish","format-standard","hentry","category-apache2","category-php","category-wordpress"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/posts\/2975","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=2975"}],"version-history":[{"count":0,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/posts\/2975\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=2975"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=2975"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=2975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}