客户端模板引擎的选择
发布于 12 年前 作者 ericwoo 9161 次浏览 最后一次编辑是 8 年前

参考: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 回复

单枪匹马的话,还是jade舒服~

学习了,有机会用用看。

http://akdubya.github.io/dustjs/

已经2年没有更新了

Linkedin 公司的开发团队接过了dustjs的维护,目前项目非常活跃,大家可参考: https://github.com/linkedin/dustjs

还有一些dustjs的扩展项目,请参考 https://github.com/linkedin

条件允许的话,自己写个模板也无妨。

作为从python-diango系来的,还是swig贴心啊

回到顶部