论坛首页 Java企业应用论坛

Velocity vs FreeMarker

浏览 29680 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-04-06  
搜索了一下,得到最关键的区别是

Velocity
1)快
2)灵活度较高


FreeMarker
1)标签库支持好
2)内嵌XML DOM解析

请大家根据做项目的经验,再谈谈在中小项目中到底那种更加好点。

个人偏向velocity,原因是simple

另外,对于最新的fastm,大家有没有研究的?
   发表时间:2005-04-06  
个人偏向FreeMarker, 因为它用$

满眼的$$$$$$, 多爽啊

这种模板的东东, 基本上成熟的技术都是差不多的, 纯粹一个人喜好而以.
0 请登录后投票
   发表时间:2005-04-06  
.....ReadOnly原来是这样挑中freemarker的阿...

表现层就素那浮云...
0 请登录后投票
   发表时间:2005-04-06  
:o velocity不也是$么?
0 请登录后投票
   发表时间:2005-04-06  
引用
Velocity
1)快
2)灵活度较高


没有听说过FreeMarker慢,灵活度差的说法。

单纯从功能角度来说,FreeMarker是Velocity的超集,Velocity有的都有,Velocity没有的也有。学习门槛我看都很低,没有什么明显的区别,一天时间就可以可以很熟练的使用了。

Velocity唯一比FreeMarker有优势的地方就是出现的比较早,用的人比较多(webwork的模板就是用了Velocity)。

如果两个你都没有用过的话,那没有什么道理不用FreeMarker。
1 请登录后投票
   发表时间:2005-04-06  
velocity可以做类似

$request.session.removeAttribute("varName")

的操作,而freemarker不能

速度方面没有严谨的解释,不过看到了几处文章这样写的
0 请登录后投票
   发表时间:2005-04-06  
在view里面做一些动作,似乎不太好吧

昨天用了一下freemarker,用来生成html静态文件,几分钟就搞定了,不错

第一次用freemarker . 除了修改webwork的模块还没有用过velocity

嘿嘿 初学者
0 请登录后投票
   发表时间:2005-04-06  
多谢楼主提到 fastm 。我写的 fastm, 我来做一个fastm和velocity和freemarker的比较。 :-)

fastm 以前发布的第一个版本,Object Model 只支持 IValueSet。
现在进行了比较大的改进, Object Model 支持 POJO (包括Map)。这个方面和 velocity , freemarker 使用OGNL 的方法类似。 只是 fastm 不支持脚本,所以,只支持 property get。
比如, {map.a.b.c}  可以表示 map 里面放了一个key = "a" 对应的 a  Object。 a 有 b 属性, b 属性含有 c 属性 (a, b, c都可以是 bean 或 map)。 和 velocity, freemarker的方式很像。

BEGIN-DYNAMIC 既可以展开 集合, 也可以展开 单个对象。还有这样的用法。 也可以把对象树展开。 类似于 Delphi 里面的 with 语法。
<!-- BEGIN DYNAMIC: map -->
   <!-- BEGIN DYNAMIC: a  -->
     free textg {b.c} free text
     <!-- BEGIN DYNAMIC: b  -->
     free text
     {c}
      free text
     <!-- END DYNAMIC: b  -->
   <!-- END DYNAMIC: a  -->
<!-- END DYNAMIC: map -->

如phplib一样, fastm 只有 begin - end ,  {object path} 两种定义方式。不支持脚本逻辑(或者 相当于只支持了 for 循环 和  bean getter 两种最基本的 脚本逻辑)
如果在 velocity , freemarker中只使用 for,   和 OGNL getter 。就相当于 fastm 的用法。

可以看出,在模板脚本方面,fastm的功能非常弱,只相当于velocity, freemarker的一个子集,fastm强制用户把页面逻辑写入到后台的代码中,因为模板不支持更多的逻辑。后台的代码修改(页面逻辑)之后,是要重新编译的。freemarker, velocity 的页面逻辑不需要编译。

上述是从传统的模板开发方式 来看, fastm的一些不足。下面讲fastm的一些优势。
一点优势是, fastm的 BEGIN - END 在 xml 注释部分,不会影响显示。而 #for 会影响一点显示效果,不过影响很小。
由于 fastm 强制 用户把页面逻辑写入到后台的代码中,所以这部分代码的调试和测试会比较容易,因为IDE的这些支持要好于脚本调试工具。(这不是fastm的好处,而是一个为fastm强制后台页面逻辑的一个辩解。如果在velocity, freemarker中只使用 for 和 getter, 那么达到的效果一样)

fastm 的一个更大的优势是, template 本身是一个 可以当作资源使用的 Text DOM,类似于 XML DOM (html DOM), 但是 粒度更粗一些。正如前面所说, fastm template dom 只有两种定义, 也只有 3 种node:  static text,  begin - end dyanmic part,  {variable part}。
用户可以如同操作 xml dom 一般(甚至更简单) ,操作 fastm template dom, 以便把 fastm 作为生产材料 创造新的 template 。
比如,template2 = template1.replaceNode("list", tableNode);
就把template 1 的 list 换成了 table。而外框布局不变。
所以非常适合 Portal Layout, CMS Layout的在线用户订制。比静态配置的site mesh,  struts tiles, jsp include 等的功能要灵活和强大很多 (xml dom的 runtime 随意增删替换 node 的强大程度)。

velocity , freemarker template 翻译的结果是一个语法树,是用来执行的。无法作为新模板的生产材料。

fastm 的主要倾向还是集成 jivan , wicket (tapestry 含有for, if - else)template XML DOM / Page Component 的方式的一些好处。

POJO + Text DOM => TEXT RESULT
这个TEXT可以是 HTML, XML, Code等。

一般来说,速度和空间的瓶颈都不在 template 层。
但如果要比较的话,fastm的执行(其实没有执行,只是匹配)肯定是最快的。当然,这个比较是不公平的。fastm需要后台逻辑把所有的分支循环都做好一个POJO, 然后自己只做一个匹配过程。
fastm template的空间也是最小的,几乎就相当于 template text的本身大小,因为几乎不需要存储额外的信息(如语法树,或者 xml dom node 那么细粒度的节点) 也因为如此,fastm template 的解析速度也是最快的,多次测试的结果显示出 解析速度有时 高于tempate Object 流化后读出来的速度。

fastm 适合于“所见即所得”要求比较高(如在线编辑)的时候 (jivan 这方面更强)。尤其适合Portal, CMS 等Layout 比较复杂、页面部分缓存操作比较多的项目。

下面的特性表,10 是满分

template feature        |  所见即所得 |  runtime layout change | page component
velocity, freemarker   |       8           |             0                       |    0
----------------- fastm  |       9           |           10                       |    8
------------------ jivan  |     10            |           10                      |   6
------wicket, tapestry |        9           |            0                        |  10
0 请登录后投票
   发表时间:2005-04-06  
andyyehoo 写道
velocity可以做类似

$request.session.removeAttribute("varName")

的操作,而freemarker不能

速度方面没有严谨的解释,不过看到了几处文章这样写的


模板是干这个的吗?这是view应用的一个典型的bad smell!

实际上有不少人都在批评velocity里面引入request和response造成了逻辑代码污染view层的问题。
1 请登录后投票
   发表时间:2005-04-07  
robbin 写道


模板是干这个的吗?这是view应用的一个典型的bad smell!

实际上有不少人都在批评velocity里面引入request和response造成了逻辑代码
污染view层的问题。


理论上是不应该干这个,不过实际上就难说。我们有个项目中,就是因为freemarker不能干这个而苦恼呢,虽然最后也可以解决,不过就是麻烦得很。灵活本身就是双刃刀的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics