Varal de Bits pegando um solzinho para aclarar as idéias…

3jan/090

Celta ou Uno? .erb ou .haml?

Dúvidas cruéis ou simplesmente gosto?

Bom como eu falei finalmente consegui tempo para fazer um teste de performance para tentar descobrir o que é melhor. Usar haml ou as bibliotecas do RoR para gerar html.

Fiz um teste bem básico de renderização para sanar minha grande curiosidade. Fiz uma busca de 70456 usuários e depois um loop básico.

RoR:

<ol>
<% @users.each do |user| %>
<li>
<%= link_to "#{user.first_name} #{user.last_name}", user %><br/>
<%= mail_to user.email, user.email %>
</li>
<% end %>
</ol>

#HAML

%ol
- @users.each do |user|
%li
%a{:href => "/users/#{user.id}"}= "#{user.first_name} #{user.last_name}"
%br
%a{:href => "mailto:#{user.email}"}= user.email

Fiquei surpreso com o resultado. Ao utilizar o #haml minha página renderizou em 34.34400 (12%) e para a minha surpresa sem o #haml em 31.95400 (11%). Uma diferença de pouco mais de 2sec. Para um loop simples e pouco conteúdo para renderizar é uma diferença muito grande. Se você pensar em uma página com bastante códigos #haml essa diferença pode aumentar considerávelmente.

Estes testes foram feitos na "janela", nem sempra esse janela está limpa com vidrex, por isso quero ainda fazer em um pc linux.

Bom é isso ai. Fica a seu critério. Visualmente o #haml é bem melhor, validação W3C também, porém para performance fica minhas dúvidas.

Sobre o Celta e o Uno. Fico com o Celta.

16dez/080

Isso leva o #haml ser ruim?

Bom estou aqui novamente falando do #haml. Exatamente agora acabei de converter um projeto todo para #haml encontrei alguns obstáculos na utilização do haml. Ainda não fiz o teste de performance, mas assim que terminar esse artigo farei alguns testes para possívelmente aplicar o #haml em um projeto que estamos trabalhando. Assim que tiver resultado post aqui para vocês.

Bom voltando aos obstáculos. Na verdade não sei se posso chamar de obstáculos, mas sim de qualidade de código. Uma das coisas que mais me chamou atenção no #haml foi a questão de economia de linhas como falei no artigo anterior. Porém em alguns pontos gastei mais linhas do que economizei.

Para gerar um menu assim:

ver álbum | adicionar mais fotos | editar álbum | excluir álbum

Você pode fazer assim:
<%= link_to 'ver álbum', 'url' %> |
<%= link_to 'adicionar mais fotos', 'url' %> |
<%= link_to 'editar álbum', 'url' %> |
<%= link_to 'excluir álbum', 'url' %>

Agora em #haml:
a%{:href => url} ver álbum
|
a%{:href => url} adicionar mais fotos
|
a%{:href => url} editar álbum
|
a%{:href => url} excluir álbum

Quase dobramos o número de linhas, de 4 para 7 linhas. Esse é um exemplo que você irá ter mais linhas do que se não usasse o #haml, com certeza irá bater com outros detalhes. Porém até agora ainda não considero o #haml ruim, olhando a documentação encontrei muitas coisas que não tinha reparado antes. Mas por hoje é só.

Vou aproveitar para dar um dica.
Quanto você for fazer um form em sua aplicação e utilizar a função "form_for" e derivados não coloque "=" e sim "-" pois senão seu "form" será duplicado.

12dez/087

#haml – Soluções em HTML?

Recentemente meu irmão Ronaldo Ferraz, apresentou uma coisinha chamada HAML a mim, comecei a "brincar" com ela no mesmo instante e comecei a achar esse bichinho interresante. O que ele exatamente faz pra você, resumidamente.

Ele ajuda a você a criar html. Você não precisa preocupar mais com identação, abrir e fechar tag, onde abre e onde fecha tag html e o melhor economiza código.

Estou aplicando esse bichinho em um site pessoal que estou desenvolvendo. Tive já alguns resultados gratificantes. A página que renderiza o layout tem 172 linhas, após converter para haml, terminei com 42 linhas e com o código perfeitamente identado e limpo.

Até este momento estava muito empolgado, mas estou começando a encontrar alguns obstáculos. Não grandes o suficiente para parar ou descatar o haml, mas que ainda não encontrei soluções.

Por exemplo:

<!--[if IE 7]>
<%= stylesheet_link_tag "ie7" %>
<![endif]-->

<!--[if lte IE 6]>
<%= stylesheet_link_tag "ie6" %>
<![endif]-->

Isso eu ainda não consegui aplicar ao haml, o que faço é criar um partial em htm.erb.
O que ainda não tive tempo de testar é performace, mas assim que der estarei aplicando a postando aqui.

Pessoal se vocês tiverem dicas e sugestões posta ai para a gente.