精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-04-06
Velocity 1)快 2)灵活度较高 FreeMarker 1)标签库支持好 2)内嵌XML DOM解析 请大家根据做项目的经验,再谈谈在中小项目中到底那种更加好点。 个人偏向velocity,原因是simple 另外,对于最新的fastm,大家有没有研究的? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-04-06
个人偏向FreeMarker, 因为它用$
满眼的$$$$$$, 多爽啊 这种模板的东东, 基本上成熟的技术都是差不多的, 纯粹一个人喜好而以. |
|
返回顶楼 | |
发表时间:2005-04-06
.....ReadOnly原来是这样挑中freemarker的阿...
表现层就素那浮云... |
|
返回顶楼 | |
发表时间:2005-04-06
:o velocity不也是$么?
|
|
返回顶楼 | |
发表时间:2005-04-06
引用 Velocity
1)快 2)灵活度较高 没有听说过FreeMarker慢,灵活度差的说法。 单纯从功能角度来说,FreeMarker是Velocity的超集,Velocity有的都有,Velocity没有的也有。学习门槛我看都很低,没有什么明显的区别,一天时间就可以可以很熟练的使用了。 Velocity唯一比FreeMarker有优势的地方就是出现的比较早,用的人比较多(webwork的模板就是用了Velocity)。 如果两个你都没有用过的话,那没有什么道理不用FreeMarker。 |
|
返回顶楼 | |
发表时间:2005-04-06
velocity可以做类似
$request.session.removeAttribute("varName") 的操作,而freemarker不能 速度方面没有严谨的解释,不过看到了几处文章这样写的 |
|
返回顶楼 | |
发表时间:2005-04-06
在view里面做一些动作,似乎不太好吧
昨天用了一下freemarker,用来生成html静态文件,几分钟就搞定了,不错 第一次用freemarker . 除了修改webwork的模块还没有用过velocity 嘿嘿 初学者 |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2005-04-06
andyyehoo 写道 velocity可以做类似
$request.session.removeAttribute("varName") 的操作,而freemarker不能 速度方面没有严谨的解释,不过看到了几处文章这样写的 模板是干这个的吗?这是view应用的一个典型的bad smell! 实际上有不少人都在批评velocity里面引入request和response造成了逻辑代码污染view层的问题。 |
|
返回顶楼 | |
发表时间:2005-04-07
robbin 写道 模板是干这个的吗?这是view应用的一个典型的bad smell! 实际上有不少人都在批评velocity里面引入request和response造成了逻辑代码 污染view层的问题。 理论上是不应该干这个,不过实际上就难说。我们有个项目中,就是因为freemarker不能干这个而苦恼呢,虽然最后也可以解决,不过就是麻烦得很。灵活本身就是双刃刀的。 |
|
返回顶楼 | |