论坛首页 Java企业应用论坛

几款模板引擎的性能对比

浏览 45640 次
该帖已经被评为良好帖
作者 正文
   发表时间:2008-12-15   最后修改:2008-12-15
sdh5724 写道
xuyao 写道
很好,nnd,刚在velocity上大规模并发测试上碰到性能问题,marge方法效率低,正好换st试试。



不知道你做什么大型应用, 一天50亿PV的?
就我知道的, 不少大站点都是VELOCITY做的。

股票行情,我们用velocity来合成json串,全是股票信息,虽然比直接用那个JSONArray那个快很多,但是瓶颈还在这块,因为我们数据都读到内存里。如果直接拼StringBuffer会快1/3.所以想看看有啥模板可以提高一下。因为你停留在一个页面,行情列表是需要不停动态刷新的。velocity做一般网站可能可以,但是做股票行情的,还是不够理想。原来想有时间,改改velocity的源代码。她解析模板比较复杂,所以性能会有影响。因为我们是国内最大的金融门户。
0 请登录后投票
   发表时间:2008-12-15  
JSON.org那几个java库可是很糟糕的,你可以试试这个:
http://code.google.com/p/lite/wiki/JSEL

我在新版本中增加了专门的json解析和系列化支持,速度比官方版本要快不少。
0 请登录后投票
   发表时间:2008-12-16  
xuyao 写道
sdh5724 写道
xuyao 写道
很好,nnd,刚在velocity上大规模并发测试上碰到性能问题,marge方法效率低,正好换st试试。



不知道你做什么大型应用, 一天50亿PV的?
就我知道的, 不少大站点都是VELOCITY做的。

股票行情,我们用velocity来合成json串,全是股票信息,虽然比直接用那个JSONArray那个快很多,但是瓶颈还在这块,因为我们数据都读到内存里。如果直接拼StringBuffer会快1/3.所以想看看有啥模板可以提高一下。因为你停留在一个页面,行情列表是需要不停动态刷新的。velocity做一般网站可能可以,但是做股票行情的,还是不够理想。原来想有时间,改改velocity的源代码。她解析模板比较复杂,所以性能会有影响。因为我们是国内最大的金融门户。


1. 可能的话用StringBuilder替换StringBuffer
2. 使用Java 6
0 请登录后投票
   发表时间:2008-12-16  
st ... 一个连doc都没有的项目就算了
0 请登录后投票
   发表时间:2008-12-16  
spyker 写道
allskystar 写道
smarty4j其实是一个编译器,将模板文档编译成了class类来执行,所以速度与直接写java代码是差不多的
对于函数的扩展,一般是继承自AbstractLineFunction或者AbstractBlockFunction
按说明实现里面的方法就行了, 对java字节码有研究的人,
可以实现AbstractFunction里面的parse方法生成字节码,这样速度会比前面一种方法快
smarty4j做的是编译缓存,而不是执行缓存,与velocity是一样的,只要源文件不变化就不会重新编译

能麻烦解释下 什么叫编译缓存 和 执行缓存么
对这个理解很模糊
谢谢了


你按JSP来理解好了,hehe
0 请登录后投票
   发表时间:2008-12-16  
ray_linn 写道
st ... 一个连doc都没有的项目就算了


smarty4j不需要写手册,网上的smarty manual很完整了
随便在baidu或者google上搜索一下"smarty manual 中文",很多
smarty4j的源代码直接导出javadoc的话,文档也很详细的,
里面有每一个功能的用法、扩展的说明以及调用的示例
0 请登录后投票
   发表时间:2008-12-16  
spyker 写道
allskystar 写道
spyker 写道
allskystar 写道
smarty4j其实是一个编译器,将模板文档编译成了class类来执行,所以速度与直接写java代码是差不多的
对于函数的扩展,一般是继承自AbstractLineFunction或者AbstractBlockFunction
按说明实现里面的方法就行了, 对java字节码有研究的人,
可以实现AbstractFunction里面的parse方法生成字节码,这样速度会比前面一种方法快
smarty4j做的是编译缓存,而不是执行缓存,与velocity是一样的,只要源文件不变化就不会重新编译

能麻烦解释下 什么叫编译缓存 和 执行缓存么
对这个理解很模糊
谢谢了


你按JSP来理解好了,hehe


编译缓存 在代码编译的时候 进行模板缓存
执行缓存 在代码调用的时候 进行模板缓存
对否?


一个是把编译形成的结果缓存,下次就不需要再次编译,典型的代表是jsp
一个是把执行的结果缓存,一定时间内就不需要再次执行,典型的代表是一些框架集成了oscache缓存的页面
第二种,会比第一种快很多倍,只是实时性就不能保证的
0 请登录后投票
   发表时间:2008-12-16  
spyker 写道
allskystar 写道

一个是把编译形成的结果缓存,下次就不需要再次编译,典型的代表是jsp
一个是把执行的结果缓存,一定时间内就不需要再次执行,典型的代表是一些框架集成了oscache缓存的页面
第二种,会比第一种快很多倍,只是实时性就不能保证的


这里执行的结果缓存 是模板填充数据后 对执行结果的缓存么
还是 什么?

对缓存这块不是很了解
麻烦赐教


是你这个理解,不过一般的模板引擎都不会缓存执行结果,但是很多前端框架会缓存,
因为很多应用,比较博客等,更新的次数是远远少于阅读次数的,而且实时性也要求不高
就算慢个几分钟一般也没什么,多数用的是缓存执行结果的方式来加快速度
0 请登录后投票
   发表时间:2008-12-16  
spyker 写道
allskystar 写道
smarty4j其实是一个编译器,将模板文档编译成了class类来执行,所以速度与直接写java代码是差不多的
对于函数的扩展,一般是继承自AbstractLineFunction或者AbstractBlockFunction
按说明实现里面的方法就行了, 对java字节码有研究的人,
可以实现AbstractFunction里面的parse方法生成字节码,这样速度会比前面一种方法快
smarty4j做的是编译缓存,而不是执行缓存,与velocity是一样的,只要源文件不变化就不会重新编译



是不是说 其他几个模板是执行缓存呢?  还是其他


sorry,没说清楚,我这么说主要是针对前面一个人说smarty在php上是做执行缓存,
才回答的,应该说,一般的模板都是做的编译缓存
smarty4j是生成字节码执行的,所以才有编译优化的可能,
现在的编译优化主要体现在条件短路算法和变量外提算法
2 请登录后投票
   发表时间:2008-12-17  
ray_linn 写道
st ... 一个连doc都没有的项目就算了

可不要瞎说,st可是allskystar大牛的大作。

不熟悉smarty语法,不赶妄评,但是从效率上说,st可是绝对的王者。
0 请登录后投票
论坛首页 Java企业应用版

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