论坛首页 Java企业应用论坛

比Velocity快10倍的模板引擎

浏览 55933 次
该帖已经被评为精华帖
作者 正文
   发表时间:2011-09-14  
agapple 写道
这个Httl的工具类支持怎么看着有点别扭
如果是基于参数识别,那如果我注册的两个工具类有着相同的参数。那Httl会是如何处理?
根据变量类型找到方法执行,这个我觉得有点优化过度了,反而不太符合一般人的编程习惯

这个其实是想实现类似Ruby或JavaScript中的OpenClass概念,可以从外部给对象动态添加方法,只是采用静态法进行attach而已。
0 请登录后投票
   发表时间:2011-09-14  
还有一点感觉就是,不适合现在网站的模板开发习惯。
很多人在写网站页面时,velocity上也会将javascript语句动态生成,比如tree的构建等,还有就是一些xml,xls输出等也会用velocity。

velocity的一些字节码编译的优化,也有相关人在做,但是投入和收益是否得当那得权衡了。和taobao的兄弟沟通过,他们做的velocity静态编译优化提升的并不明显。

反而对String和byte的多次encode/decode转化处理下,提升的非常明显。因为一个页面90%都是静态的html。大概原理是将这html预先生成byte并cache住,再对动态变量生成string字符串,只对这10%的decode后转成byte,最后输出时将两段byte拼接一下即可
0 请登录后投票
   发表时间:2011-09-14  
javatar 写道
agapple 写道
你这里说是减少boxed/unboxed的处理,主要是体现在哪个方面?默认都转化成对象处理吗?

一般的模板引擎都将数字boxed成Object再处理,因为要反射,而模板上大量使用基本类型输出,优化是有意义的。


你这里的优化是指对boxed的调用,转成字节码处理而非反射调用Integer.valueof()?
0 请登录后投票
   发表时间:2011-09-14   最后修改:2011-09-15
agapple 写道
还有一点感觉就是,不适合现在网站的模板开发习惯。
很多人在写网站页面时,velocity上也会将javascript语句动态生成,比如tree的构建等,还有就是一些xml,xls输出等也会用velocity。


我个人喜欢简洁好玩的语法,只是为了标新立异,语法解析并不麻烦,就算换成Velocity语法也是没大多问题。
这种语法可能不适合公司现在这么复杂的场景,但用在一些小网站会方便很多,包括我自己偶尔写的一些小页面上。
我没有和温少一样,把它放在公司内部的开源网站上,而是放在googlecode上,就是因为没在公司用过,只是个人试验产品。

agapple 写道
velocity的一些字节码编译的优化,也有相关人在做,但是投入和收益是否得当那得权衡了。和taobao的兄弟沟通过,他们做的velocity静态编译优化提升的并不明显。

反而对String和byte的多次encode/decode转化处理下,提升的非常明显。因为一个页面90%都是静态的html。大概原理是将这html预先生成byte并cache住,再对动态变量生成string字符串,只对这10%的decode后转成byte,最后输出时将两段byte拼接一下即可


这个我也看过蒋江涛的PPT,从测试的数据看,将大模板折成小模板(提升35%),以及将String缓存后,用byte[]输出,性能提升幅度很大(提升50%),而编译成字节码反而收效少(提升10%),我也打算把这些优化直接加到模板引擎中,如果只是将Velocity编译成弱类型字节码,性能提升不会太大,JavaCC生成的AST就算是解释执行效率也是很高的,所以要对Velocity增加强类型定义,就像何坤他们在开发StaticVelocity编辑器插件时,为了让Eclipse能自动提示一样,在模板前面加强类型声明注释,编译的时候也一样。

我把《淘宝吞吐量优化》的PPT也贴在附件上,有兴趣的同学可以看下。(附件迁移到主帖中)
0 请登录后投票
   发表时间:2011-09-14  
javatar 写道
agapple 写道
还有一点感觉就是,不适合现在网站的模板开发习惯。
很多人在写网站页面时,velocity上也会将javascript语句动态生成,比如tree的构建等,还有就是一些xml,xls输出等也会用velocity。


我个人喜欢简洁好玩的语法,只是为了标新立异,语法解析并不麻烦,就算换成Velocity语法也是没大多问题。
这种语法可能不适合公司现在这么复杂的场景,但用在一些小网站会方便很多,包括我自己偶尔写的一些小页面上。
我没有和温少一样,把它放在公司内部的开源网站上,而是放在googlecode上,就是因为没在公司用过,只是个人试验产品。

agapple 写道
velocity的一些字节码编译的优化,也有相关人在做,但是投入和收益是否得当那得权衡了。和taobao的兄弟沟通过,他们做的velocity静态编译优化提升的并不明显。

反而对String和byte的多次encode/decode转化处理下,提升的非常明显。因为一个页面90%都是静态的html。大概原理是将这html预先生成byte并cache住,再对动态变量生成string字符串,只对这10%的decode后转成byte,最后输出时将两段byte拼接一下即可


这个我也看过蒋江涛的PPT,从测试的数据看,将大模板折成小模板(提升35%),以及将String缓存后,用byte[]输出,性能提升幅度很大(提升50%),而编译成字节码反而收效少(提升10%),如果只是将Velocity编译成弱类型字节码,性能提升不会太大,JavaCC生成的AST就算是解释执行效率也是很高的,所以要对Velocity增加强类型定义。

我把《淘宝吞吐量优化》的PPT也贴在附件上,有兴趣的同学可以看下。


哈哈,说的很在理,这个要顶的。
原本是打算在网站做velocity的一些优化,把taobao的代码都弄过来了。后来有其他事就被搁浅了,现在也不知道啥子个状况
0 请登录后投票
   发表时间:2011-09-14   最后修改:2011-09-15
agapple 写道
哈哈,说的很在理,这个要顶的。
原本是打算在网站做velocity的一些优化,把taobao的代码都弄过来了。后来有其他事就被搁浅了,现在也不知道啥子个状况

模板的渲染还是挺耗时的,可以推动优化一下,节省机器。
0 请登录后投票
   发表时间:2011-09-14  
主持,鼓励
0 请登录后投票
   发表时间:2011-09-15   最后修改:2011-09-15
这样的语法真是一大败笔,不改变这种强倾入的语法,是没有人会用的。标新立异不是这样立的,其实一点也不直观。
0 请登录后投票
   发表时间:2011-09-15  
unika_ly12 写道
ray_linn 写道
指令采用 html 属性...光这个就让人快吐了。。

+1

创新点  +1,楼上的喜欢吐槽啊
0 请登录后投票
   发表时间:2011-09-15   最后修改:2011-09-15
javatar 写道
Reset 写道
总体感觉是 你把 JSP 搬出来了。。

嗯,就是JSP的思路,说准确点是JSP的Scriptlet的思路,JSP的Taglib不是,而Scriptlet嵌在HTML中,对UI的开发影响太大,不被推荐,HTTL只是让它更像模板,JSP的Taglib和它的EL实际上是解释执行的,效率并不高。


我一开始就理解你的这种做法,
不得不推荐一下我写beetlhttp://www.iteye.com/topic/1114048,另外一种做法,对html影响比较小,比如下面代码段
<!--:inlucdeFile('/loginInfo.html'){ -->
<p>longin user: javamonkey</p>
<!--:} -->
<!--:for(order in Order){ -->
<p>$order.id$</p>
...........
<!--:} -->

其中,在beetl中设定<!--: 为控制语句开始符号,-->为控制语句结束符号

如果去掉这些html“注释”(实际上是beetl语句,但欺骗了IE和HTML Parser)
内容就是正常的HTML

<p>longin user: javamonkey</p>
<p>$order.id$</p>

说明一下 inlucdeFile 是个文本处理函数,在引擎渲染的时候,会引入并渲染loginInfo.html,并忽略{}之间的内容
for(order in Order) 是个循环了
0 请登录后投票
论坛首页 Java企业应用版

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