锁定老帖子 主题:比Velocity快10倍的模板引擎
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-09-14
agapple 写道 这个Httl的工具类支持怎么看着有点别扭
如果是基于参数识别,那如果我注册的两个工具类有着相同的参数。那Httl会是如何处理? 根据变量类型找到方法执行,这个我觉得有点优化过度了,反而不太符合一般人的编程习惯 这个其实是想实现类似Ruby或JavaScript中的OpenClass概念,可以从外部给对象动态添加方法,只是采用静态法进行attach而已。 |
|
返回顶楼 | |
发表时间: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拼接一下即可 |
|
返回顶楼 | |
发表时间:2011-09-14
javatar 写道 agapple 写道 你这里说是减少boxed/unboxed的处理,主要是体现在哪个方面?默认都转化成对象处理吗?
一般的模板引擎都将数字boxed成Object再处理,因为要反射,而模板上大量使用基本类型输出,优化是有意义的。 你这里的优化是指对boxed的调用,转成字节码处理而非反射调用Integer.valueof()? |
|
返回顶楼 | |
发表时间: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也贴在附件上,有兴趣的同学可以看下。(附件迁移到主帖中) |
|
返回顶楼 | |
发表时间: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的代码都弄过来了。后来有其他事就被搁浅了,现在也不知道啥子个状况 |
|
返回顶楼 | |
发表时间:2011-09-14
最后修改:2011-09-15
agapple 写道 哈哈,说的很在理,这个要顶的。
原本是打算在网站做velocity的一些优化,把taobao的代码都弄过来了。后来有其他事就被搁浅了,现在也不知道啥子个状况 模板的渲染还是挺耗时的,可以推动优化一下,节省机器。 |
|
返回顶楼 | |
发表时间:2011-09-14
主持,鼓励
|
|
返回顶楼 | |
发表时间:2011-09-15
最后修改:2011-09-15
这样的语法真是一大败笔,不改变这种强倾入的语法,是没有人会用的。标新立异不是这样立的,其实一点也不直观。
|
|
返回顶楼 | |
发表时间:2011-09-15
unika_ly12 写道 ray_linn 写道 指令采用 html 属性...光这个就让人快吐了。。
+1 创新点 +1,楼上的喜欢吐槽啊 |
|
返回顶楼 | |
发表时间: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) 是个循环了 |
|
返回顶楼 | |