Melhorar a velocidade da sua Aplicação
Hoje vou traduzir um artigo do Erik Andrejko falando sobre como melhorar a velocidade da sua aplicação Rails.
Leia o original aqui
Seus usuários ficam felizes quando não notam a velocidade que a sua aplicação responde. Se eles notarem esta velocidade é porque provavelmente está muito lenta. Muitas melhorias acontecem fora da sua aplpicação Rails.
Típico tempo de carregamento de páginas
Aqui está a saída do relatório "Safari Web Inspector - Netwrok". A página levou 3 segundos para carregar.

Repare que a aplicação Rails demorou apenas 300 ms, incluindo o tempo necessário para fazer o download do HTML gerado. Cerca de 90% do tempo foi usado para carregar os outros tipos: javascript, css e imagens.
YSlow
A principal ferramenta para analisar a velocidade de qualquer aplicação web é Yslow (Yahoo! YSlow for Firebug) do Yahoo. YSlow analisa a sua página e produz um relatório:

Safari Desenvolver Menu
Instale o "Safari Develop Menu" com o seguinte comando:
defaults write com.apple.Safari IncludeDebugMenu 1
O "Safari Web Inspector - Network" vai produzir um relatório como acima mostrando o tempo gasto para carregar cada elemento da página.
Faça menos solicitações HTTP/Minify JS
Você deve enviar apenas 1 arquivo javascript e 1 arquivo css. Não mais. O plugin asset packager (Scott Becker - AssetPackager - JavaScript and CSS Asset Compression for Production Rails Apps) é um plugin que empacota automaticamente todos os seus arquivos CSS e Javascript em um arquivo. Instale com:
script/plugin install git://github.com/sbecker/asset_packager.gitEm seguida, produzir o asset_packages.yml com:
rake asset:packager:create_yml
Você precisará editar o arquivo config/asset_packages.yml para assegurar que os scripts são carregados na ordem correta.
Em seu application.html.erb layout arquivo coloque o seguinte:
<script src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js" type="text/javascript" charset="utf-8"></script> <%= javascript_include_merged :base %> <%= stylesheet_link_merged :base %>
O arquivo prototype.js será carregado a partir do Google. Com alguma sorte o usuário já o tem em cache.
Carregar arquivos em paralelo
A maioria dos navegadores faz, no máximo, dois pedidos simultâneos para cada host. Configure o seu production.rb para usar um outro host:
# Enable serving of images, stylesheets, and javascripts from an asset server config.action_controller.asset_host = "http://assets.yourhost.com"
Naturalmente que você terá que configurar o assets.yourhost.com para apontar para seu servidor web.
Adicionar um cabeçalho de Expiração/Gzip componentes
Se você estiver usando o Apache você pode configurar o virtual host para usar mod_deflate e também mod_expires
<VirtualHost _:80> ExpiresActive On ExpiresDefault "access plus 1 month" AddOutputFilterByType DEFLATE text/html text/plain text/xml application/javascript text/css ... </VirtualHost>
Etags
Rails 2.2 suporta Etags. Procure por um outro artigo sobre Etags no futuro.
Minha Contribuição
O Erik escreveu alguns pontos importantes. Porém não mencionou que o Rails também faz o empacotamento dos arquivos javascript e css. A diferença em relação ao asset_packager, é a biblioteca utilizada para comprimir os arquivos. O asset_packager consegue gerar arquivos menores, porém nem sempre você pode utiliza-lo no seu servidor de produção, neste caso utilize o helper do Rails da seguinte forma.
<%= javascript_include_tag "jquery", "default", :cache => true %>O mesmo pode ser feito para o css
<%= stylesheet_link_tag "plugins/crossbrowser", "default", :cache => true %>Uma ferramenta que muito me ajudou foi o Google Speed que como YSlow também é um plugin para FireFox porém já está disponível para versão 3.5.