HTML 是没有重用代码的机制的,如果页面由几个非常相似的部分组成,是没办法重用代码的,这是要用模板引擎的重要原因。
HTML 里面的冗余数据太多了(所以才有 Emmet),编辑比较复杂的 HTML 的时候很是麻烦,如果没有编辑器的语法检查,很难保证写出来的代码没有语法错误。当然,这一点是我的个人审美,也许有人认为 HTML 较 Jade 更清楚呢。我觉得这么认为的人可能是对 Jade 的了解还比较少(说起来 Jade 的官网只介绍了一小部分的语法,看完了觉得稀里糊涂也很正常),所以觉得没有熟悉的 HTML 清楚。
我是 Jade 的脑残粉,Jade 和 EJS/Handlebars 相比有一个重要区别,Jade 只能处理 HTML, 而 EJS/Handlebars 其实并不关心被处理的文本是不是 HTML. 因此 Jade 的语法略复杂,报错的原因更多,但 Jade 编译出来的一定是语法正确的 HTML.
我用 Jade 的时候都是直接在后端渲染,在前端使用 Jade 似乎不是一个好主意(因为 Jade 要比 Handlebars 之类的库大很多)。我一般是在后端用 Jade, 前端配合一个轻量级的模板引擎(jquery-tmpl):
script(id='members-template', type='text/x-jquery-tmpl')
header= t('ticket.members')
{{each members}}
a.pull-left
img.img-avatar(src='${$value.preferences.avatar_url}', alt='${$value.username}')
{{/each}}