参考:http://engineering.linkedin.com/frontend/client-side-templating-throwdown-mustache-handlebars-dustjs-and-more
主要的客户端模板引擎
1、允许嵌入JavaScript的模板引擎:可嵌入任何JavaScript代码
- underscore.js
- Jade
- haml-js
- jQote2
- doT
- Stencil
- Parrot
- Eco
- EJS
- jQuery templates
- node-asyncEJS
2、无逻辑的模板引擎:只有一些简单的循环、判断逻辑,并且使用的是模板语法而不是JS语法
- mustache
- dust.js
- handlebars
- Google Closure Templates
- Nun
- Mu
- kite
如何选择模板引擎##
如果要严格执行业务逻辑和表现分类的原则,则不要选择可嵌入JS的模板引擎,从机制上避免越界的可能性。此外,选择模板引擎还应考虑以下因素:
- 是否可以同时在客户端和服务器端执行渲染;
- 是否支持表现层逻辑,即根据数据内容,选择性渲染样式或内容;
- 是否支持文本格式化,例如是否可以将JSON字符串中的\n替换成《br/》;
Linkedin公司经过比较,选择dust.js作为其客户端模板技术,主要基于以下考虑:
- 缓存:与服务器端模板相比,客户端模板可以通过内容分发网络CDN提供,以降低延迟和带宽占用。另外模板文件可在浏览器端缓存,因此一旦模板初次加载后,服务器只需要提供动态数据(例如JSON),这样效率非常高;
- 性能:dust.js可以被预编译为高效的JavaScript函数;
- 浓缩:模板可以分解为小片段,HTML标记和渲染逻辑可重用,即便后台采用不同的技术堆栈(Java Ruby等);
- 解耦:dust.js模板鼓励表现层和应用层、业务逻辑分离;
- 跨浏览器、跨库:dust.js和所有现代浏览器兼容,可以和各种JS类库同时使用,例如YUI 和 jQuery。它默认禁止一些不合适的用法,帮助我们预防XSS攻击;
- 服务器端支持:如果你有一个客户端不能运行JavaScript,例如搜索引擎爬虫,那么页面必须在服务器端渲染。dust.js模板不仅支持客户端渲染,也可以通过 node.js 或 Rhino在服务器端渲染;
- 渐进渲染:dust.js模板支持同步或异步渲染,因此可将耗时的操作放在背后进行,其他事情可以先完成。当在服务器端渲染时,同样可将某些内容优先渲染,这样用户很快就能看到一些东西;
- 简单、强大、开放:dust.js模板语法易于学习和扩展。Linkedin开发了dust helpers类库,以清晰的方式实现格式化、国际化、表现层逻辑等功能;
6 回复
Linkedin 公司的开发团队接过了dustjs的维护,目前项目非常活跃,大家可参考: https://github.com/linkedin/dustjs
还有一些dustjs的扩展项目,请参考 https://github.com/linkedin