"Mágica" no Rails: vilão ou herói?

Posted by Leonardo Sun, 02 Sep 2007 12:40:12 GMT

A quantidade de "mágica" existente no Rails pode auxiliar em muito o desenvolvimento de sites em termos de velocidade e facilidade, mas também pode machucar feio o site em termos de performance, como mostra este post. Até que ponto o uso de "mágicas" é prejudicial ou não no desevolvimento de sites? Gostaria muito de saber a opinião de vocês sobre esse assunto.

"Mágica", para aqueles que não conhecem o termo, são partes de código que executam tarefas repetitivas ou com grande chance de erros ou ainda que facilitam a vida do usuário. Por exemplo, quando se usa o método find de um model para localizar um registro no banco de dados, o Rails gera um SQL por debaixo dos panos para encontrar o registro solicitado. Ou quando se usa o método url_for para gerar uma URL, o Rails analisa a tabela de rotas para poder gerar a URL correta.

O problema nestes exemplos é que nem sempre o SQL gerado é o mais otimizado. E para que fazer o Rails perder tempo analisando a tabela de rotas se a única coisa que se quer, na maiorias das vezes, é colocar uma url do tipo /controller/action/id?

Sei que este assunto não é restrito ao Rails, mas, no Rails, parece ser levado ao extremo e ser um pouco a causa de tantas pessoas gostarem deste framework.

Posted in  | Tags ,  | no comments

Compressão de JS e CSS para aplicações Rails em produção

Posted by Leonardo Thu, 23 Aug 2007 20:41:02 GMT

Para quem é um pouco neurótico com performance como eu, Scott Becker fez um excelente plugin, o AssetPackager, para comprimir e agrupar arquivos JS e CSS. O plugin foi baseado no artigo de Cal Henderson chamado Serving Javascript Fast e utiliza o Javascript Minifier criado por Douglas Crockford e portado para o Ruby por Uladzislau Latynski.

O plugin permite que você desenvolva sua aplicação com quantos arquivos JS e CSS você quiser e, na hora de passar sua aplicação para produção, basta rodar um rake task para comprimir e agrupar seus arquivos baseado na configuração que você faz em um arquivo YAML. O helper que se utiliza nos views chama os arquivos separados, se estiver em desenvolvimento, e chama os arquivos agrupados, se estiver em produção.

Outra característica deste plugin é a criação dos arquivos agrupados com um timestamp ou SVN Revision, se existir, no prórpio nome do arquivo e não como querystring, uma vez que nem todos os browsers colocam arquivos com querystring no cache. Dessa forma, o browser pode cachear o arquivo correto e, caso haja alguma alteração, o nome do arquivo mudará forçando o browser a requisitar a nova versão.

Para mim, comprimir e agrupar esses arquivos é essencial para economizar banda, reduzir a quantidade de requests e acelerar o carregamento das páginas. Ainda pode resolver a questão de versão incorreta desses arquivos no cache do browser do usuário. Realmente muito bom!

Posted in , ,  | Tags , , , ,  | 2 comments