前言
前段时间的项目有用到NodeJs,而比较主流的模版引擎当属Ejs与Jade,该如何选择呢?各自又有什么优缺点?
EJS 结构更像原生 HTML,而 Jade 更简洁。你使用其中之一,是出于什么原因呢?看一看知乎上大家的讨论。
赞同Jade
1. 点评1
Jade有两点是超出传统模板技术的。
第一、简洁。
注意,简洁并非单指更少的符号,而是看是否能match你的需要。Jade强制的缩进格式能凸显html的结构,而对于前端来说,最重要的任务恰恰是处理结构,而不像一般的html author那样是处理内容。反过来说,假如你的主要任务是处理内容,比如写作blog之类的,那你应该用wiki或者markdown之类的,而不应该用Jade。
第二、html-aware
传统模板技术其实是通用模板,即模板引擎并不care你输出的是html还是其他格式的文本。而Jade专为HTML设计,因此可以做许多传统模板做不到的专门针对html的优化。举个几个简单的例子:
- 决定如何输出属性(当属性赋值为null/false时不输出属性,为true时只需属性不需要值,这在传统模板里写起来很麻烦、代码难看易出错)
- 自动产生well-formed结构(甚至可决定是否要输出结束标签,而传统模板理论上也做不到这点,除非引入额外的html parse或tidy)
- 换行处理,避免产生额外的空白节点
- 对输出的变量自动进行特殊字符的encode
当然,这些ejs或传统模板也有能实现的,但是用起来感觉都很挫。
2. 点评2
在我团队中,多数人倾向EJS,因为容易上手。而我们最终选择的JADE,原因只是因为expressjs默认JADE。github有句话,follow牛逼的人。
如果你的render是server side而且没有什么流量,随便那个都好。但如果你是重客户端,目标用户规模是QQ空间那样的,JADE的简洁就很重要了。
另外有HTML2JADE的可以帮你省事。https://github.com/donpark/html2jade.git
3. 点评3
刚开始为追求极简,在众多模板中选用了jade,写起来和维护起来都很爽。
4. 点评4
用过jade和ejs
如果写程序和做HTML是同一个人的情况下,建议jade,可以少写很多代码;
如果布局多用table之类的,建议ejs,填充数据就行了;
如果有专门的UE,建议ejs,你吃饱了才去htmltojade。
效率上应该差不了多少,jade有的东西实现起来有点饶了。
支持Ejs
1. 点评1
为嘛我这么喜欢EJS呢,我只想要一个简单的帮我填充数据的模板而已。
2. 点评2
从前端的角度来讲
坚决抵制乱改html的这种行为!!!比如Jade
这玩意儿绝对是个后端发明的。绝对!
jade的唯一优势就是代码简洁
但是这个唯一优势在前端的眼里,就是它最大的一个败笔
它的这种做法完全失去了html原本应该有的灵活。
要知道作为一个前端,你写的不只是html代码本身。它还密切关联着css,js等等。
对于缩进,Python我也写过一点,和Jade完全不是一回事儿
Python里面我觉得很自然,简洁,易懂。
jade里面,本来很简单的东西就被复杂化了,很多用html写都是很简单的东西,到了jade反而变复杂了。
再说,Python里面缩进远没有jade里面频繁
3. 点评3
我在用ejs,因为我研究模板引擎还不是特别透彻,看过一些文档后,发现ejs是最好上手的,算是新手适用吧。
另外,jade的缩进的确是个问题,尽管上面那么多大神表示python也是要靠缩进的(本人不懂python),但是大部分前端工程师着实不是写python的,要为了一个模板引擎培养一种习惯也许还是有成本的。
4. 点评4
数据替换,ejs够了。
5. 点评5
在node.js中,一般的项目我更倾向于ejs这种类型的模板,原因很简单:成本非常低。一个团队中有设计师,node.js新手,单纯的前端开发人员,node.js老手,都能很轻松的看懂ejs类模板。对于这个团队中的所有人员来说,ejs类更一目了然,它就是html代码嘛,你可以把模板化html的任务交给团队中的任何一位成员来完成,相比另学jade的成本来说,还是更经济的方案。
总结
我的毕业设计项目-《基于HTML5实现的多人在线游戏-你画我猜》,一个比较小的项目,倾向于仅仅是数据填充,需求就是简单易用,所以选择了Ejs。
学习资源
更多精彩点评:http://www.zhihu.com/question/20355486
Ejs官网:http://www.embeddedjs.com/
Ejs模版快速入门:http://blog.csdn.net/zhangxin09/article/details/18409119
Ejs快速入门教程:http://www.csser.com/board/4fddc4f0b28ed7d857001674
沙发,板凳都没偶的份了。