Jade versus EJS, quais são os prós e os contras de cada um e para quais propósitos cada um foi projetado?
Há algum outro mecanismo de modelo compatível com Express que seja bom e por quê?
Jade versus EJS, quais são os prós e os contras de cada um e para quais propósitos cada um foi projetado?
Há algum outro mecanismo de modelo compatível com Express que seja bom e por quê?
Respostas:
Eu usei Jade antes. O bom do Jade é que você tem uma sintaxe mais curta, o que significa que você pode digitar mais rápido. O block
em Jade é muito poderoso, o que pode me ajudar muito ao lidar com códigos HTML complexos.
Por outro lado, é difícil fazer algumas coisas simples em Jade, como adicionar classes a um DIV baseado em uma condição if simples. Eu preciso colocar algo assim
- if (isAdmin)
div.admin.user
- else
div.user
Jade também não diferencia entre as tags e as variáveis, o que torna o código muito confuso (pelo menos para mim)
a(href='/user/' + user.id)= user.name
Jade também não é amigável. Meus amigos designers costumam me dar HTML e CSS (eles mudaram para o LESS recentemente, mas ainda querem usar HTML) e, por esse motivo, se eu usar Jade, preciso converter HTML para Jade. Também no Jade, precisamos usar indentações, então se sua estrutura HTML ficar complicada, seu código ficará horrível (especialmente tabelas). Às vezes, eu nem sei em que nível estou
table
thead
tr
td
a
img
tr
td
tbody
tr
td
Recentemente, mudei para o EJS e estou feliz com isso até agora. É muito próximo ao HTML puro e usa a mesma sintaxe do mecanismo de template de frontend que estou usando (template Underscore). Devo dizer que tudo fica mais fácil com o EJS. Não preciso fazer todas as conversões ao receber modelos HTML de meu amigo designer. Tudo que preciso fazer é substituir as partes dinâmicas por variáveis passadas do ExpressJS. Coisas que me deixam louco ao usar Jade são resolvidas em EJS
<div class="<%= isAdmin? 'admin': '' %> user"></div>
E posso saber o que é com EJS
<a href="/user/<%= user.id %>"><%= user.name %></a>
Se você sentir falta da sintaxe curta de Jade (como eu), você pode combinar Zen-Coding e EJS, o que pode ajudá-lo a acelerar o progresso em geral. Sobre o desempenho, não vejo nenhuma diferença
No entanto, EJS não é tão poderoso quanto Jade, ele não tem blocos por padrão (esse cara implementou um recurso de bloco para EJS https://github.com/RandomEtc/ejs-locals )
Portanto, é totalmente dependente de você escolher o que o deixa confortável. Mas se você for usar outro mecanismo de template para o front-end como eu, é melhor se você usar a mesma coisa para ambos os lados
Atualização de 16 de dezembro de 2013: Recentemente, mudei de EJS para Swig (que tem um conceito semelhante ao de Jinja2 no mundo Python). O principal motivo é a falta de bloqueio no EJS mesmo com a ajuda do ejs-locals
. O Swig também está usando HTML puro para modelos e muitos recursos interessantes que um mecanismo de modelo deve ter, por exemplo, filtros e tags que EJS não tem
Jade
um ou dois anos atrás. Talvez esteja melhorando agora. No entanto, reavaliando meu primeiro ponto, não será fácil contornar isso
Eu não diria que um é melhor do que o outro. Eles são diferentes, com certeza, mas "melhor" é um termo bastante relativo.
Eu prefiro EJS porque acho que HTML não é tão ruim, além de me permitir trabalhar com outras pessoas sem que elas tenham que aprender Jade.
No entanto, Jade é bastante limpo e cria um código interessante em suas visualizações.
Escolha o que você achar mais confortável.