锁定老帖子 主题:几款模板引擎的性能对比
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-15
最后修改:2008-12-15
sdh5724 写道 xuyao 写道 很好,nnd,刚在velocity上大规模并发测试上碰到性能问题,marge方法效率低,正好换st试试。
不知道你做什么大型应用, 一天50亿PV的? 就我知道的, 不少大站点都是VELOCITY做的。 股票行情,我们用velocity来合成json串,全是股票信息,虽然比直接用那个JSONArray那个快很多,但是瓶颈还在这块,因为我们数据都读到内存里。如果直接拼StringBuffer会快1/3.所以想看看有啥模板可以提高一下。因为你停留在一个页面,行情列表是需要不停动态刷新的。velocity做一般网站可能可以,但是做股票行情的,还是不够理想。原来想有时间,改改velocity的源代码。她解析模板比较复杂,所以性能会有影响。因为我们是国内最大的金融门户。 |
|
返回顶楼 | |
发表时间:2008-12-15
JSON.org那几个java库可是很糟糕的,你可以试试这个:
http://code.google.com/p/lite/wiki/JSEL 我在新版本中增加了专门的json解析和系列化支持,速度比官方版本要快不少。 |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2008-12-16
st ... 一个连doc都没有的项目就算了
|
|
返回顶楼 | |
发表时间:2008-12-16
spyker 写道 allskystar 写道 smarty4j其实是一个编译器,将模板文档编译成了class类来执行,所以速度与直接写java代码是差不多的
对于函数的扩展,一般是继承自AbstractLineFunction或者AbstractBlockFunction 按说明实现里面的方法就行了, 对java字节码有研究的人, 可以实现AbstractFunction里面的parse方法生成字节码,这样速度会比前面一种方法快 smarty4j做的是编译缓存,而不是执行缓存,与velocity是一样的,只要源文件不变化就不会重新编译 能麻烦解释下 什么叫编译缓存 和 执行缓存么 对这个理解很模糊 谢谢了 你按JSP来理解好了,hehe |
|
返回顶楼 | |
发表时间:2008-12-16
ray_linn 写道 st ... 一个连doc都没有的项目就算了
smarty4j不需要写手册,网上的smarty manual很完整了 随便在baidu或者google上搜索一下"smarty manual 中文",很多 smarty4j的源代码直接导出javadoc的话,文档也很详细的, 里面有每一个功能的用法、扩展的说明以及调用的示例 |
|
返回顶楼 | |
发表时间:2008-12-16
spyker 写道 allskystar 写道 spyker 写道 allskystar 写道 smarty4j其实是一个编译器,将模板文档编译成了class类来执行,所以速度与直接写java代码是差不多的
对于函数的扩展,一般是继承自AbstractLineFunction或者AbstractBlockFunction 按说明实现里面的方法就行了, 对java字节码有研究的人, 可以实现AbstractFunction里面的parse方法生成字节码,这样速度会比前面一种方法快 smarty4j做的是编译缓存,而不是执行缓存,与velocity是一样的,只要源文件不变化就不会重新编译 能麻烦解释下 什么叫编译缓存 和 执行缓存么 对这个理解很模糊 谢谢了 你按JSP来理解好了,hehe 编译缓存 在代码编译的时候 进行模板缓存 执行缓存 在代码调用的时候 进行模板缓存 对否? 一个是把编译形成的结果缓存,下次就不需要再次编译,典型的代表是jsp 一个是把执行的结果缓存,一定时间内就不需要再次执行,典型的代表是一些框架集成了oscache缓存的页面 第二种,会比第一种快很多倍,只是实时性就不能保证的 |
|
返回顶楼 | |
发表时间:2008-12-16
spyker 写道 allskystar 写道 一个是把编译形成的结果缓存,下次就不需要再次编译,典型的代表是jsp 一个是把执行的结果缓存,一定时间内就不需要再次执行,典型的代表是一些框架集成了oscache缓存的页面 第二种,会比第一种快很多倍,只是实时性就不能保证的 这里执行的结果缓存 是模板填充数据后 对执行结果的缓存么 还是 什么? 对缓存这块不是很了解 麻烦赐教 是你这个理解,不过一般的模板引擎都不会缓存执行结果,但是很多前端框架会缓存, 因为很多应用,比较博客等,更新的次数是远远少于阅读次数的,而且实时性也要求不高 就算慢个几分钟一般也没什么,多数用的是缓存执行结果的方式来加快速度 |
|
返回顶楼 | |
发表时间:2008-12-16
spyker 写道 allskystar 写道 smarty4j其实是一个编译器,将模板文档编译成了class类来执行,所以速度与直接写java代码是差不多的
对于函数的扩展,一般是继承自AbstractLineFunction或者AbstractBlockFunction 按说明实现里面的方法就行了, 对java字节码有研究的人, 可以实现AbstractFunction里面的parse方法生成字节码,这样速度会比前面一种方法快 smarty4j做的是编译缓存,而不是执行缓存,与velocity是一样的,只要源文件不变化就不会重新编译 是不是说 其他几个模板是执行缓存呢? 还是其他 sorry,没说清楚,我这么说主要是针对前面一个人说smarty在php上是做执行缓存, 才回答的,应该说,一般的模板都是做的编译缓存 smarty4j是生成字节码执行的,所以才有编译优化的可能, 现在的编译优化主要体现在条件短路算法和变量外提算法 |
|
返回顶楼 | |
发表时间:2008-12-17
|
|
返回顶楼 | |