在刚刚入门 Node.js,在考虑使用哪个模板时,简单的以1万行数据,进行解释效率比较: Jade 模板:
!!!
html
head
title #{title}
meta(charset="UTF-8")
body
div.description #{description}
ul
- each data in datas
li.item(id='item_'+data.index)
span= data.time
a.art(href=data.url)= data.title
ejs 模板:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title><%=title%> - Page Test</title>
</head>
<body>
<div class="description"><%=description%></div>
<ul>
<% function data(data) { %>
<li class="item" id="item_<%=data.index%>"><span><%=data.time%></span><a href="<%=data.url%>" class="art"><%=data.title%></a></li>
<% } %>
<% datas.map(data) %>
</ul>
</body>
</html>
Handlebars 模板:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>{{title}} - Page Test</title>
</head>
<body>
<div class="description">{{description}}</div>
<ul>
{{#datas}}
<li class="item" id="item_{{index}}"><span>{{time}}</span><a href="{{url}}" class="art">{{title}}</a></li>
{{/datas}}
</ul>
</body>
</html>
效率比较结果(平均消耗时间,约数) Jade 287ms > ejs 43ms > Handlebars 28ms
Jade 因为采用了类似 zen coding 的语法,比较新奇,但效率极其低下。如果只保留 <li> 部分的1万行数据解释,则约为245ms。
综上所述,对 Jade,我个人不建议,除了效率,另外一个主要原因是可视化太弱,甚至可以说是毫无可视化可言,学习成本高,维护与团队合作成本高,语法过于晦涩、复杂。
最新更新: 根据 @jiyinyiyong 提供的资料,找到 http://jsperf.com/dom-vs-innerhtml-based-templating/413#status 并同样测试了 doT,速度约为15ms,为目前最快,而且提供了相对全面的模板语法:http://olado.github.com/doT/
