JSP与相关“所见即所得”模版的运行效率测试

本文对比测试了不同JSP模板技术的运行效率,包括JDynamiTe、MiniTemplator等,探讨了模板缓存及文件读取优化的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSP 与相关“所见即所得”模版的运行效率测试
虽然与 JSP 相关的模板技术有很多如: Velocity FreeMarker 之类,这些模板都有一个让我很不喜欢的地方,就是逻辑嵌入模板界面,对页面完整性破坏较大。给页面设计人员的工作带来麻烦。我所选用的二个模板 JDynamiTe MiniTemplator 则对页面破坏性较小,同时也不能在模板中嵌入逻辑。熟悉 php 的朋友可能发现跟 phplib 的应用方式比较类似。
 
 
测试环境:
CPU Intel T2050 1.6
内存: 1G
操作系统: Windows XP Professional SP2
WEB 服务器: Resin 3.0.23
 
测试方法:
分别编写五个不同的模板解析页面(具体见下方案说明),在每次模板类 NEW 之前获取系统纳秒时间,再在页面解析完成未输出之前再次获取系统纳秒时间,其差值直接输出到控制台。
在第一次刷新后,后五次连续刷新。每一套测试方案生成 6 个测试结果
由于测试未使用专业测试工具,其测试结果仅供参考。
 
模板方案说明
采用五种不出的模板方案,具体说明如下:
1.      JDynamiTe
JDynamiTe 是一个比早老的 JSP 模板工具,最新版本仍然是具于 jde1.1 开发。同时也是与 phplib 最为类似的一种模板技术,现已停止开发。
2.      MiniTemplator
这款模板同时存在 php asp 的多个版本,整体代码比较小巧。
3.      MiniTemplatorCache
大体同上,只是在原有基础上添加了 MiniTemplator 对象的 Cache 技术,只需在第一次调用时生成一个 MiniTemplator 对象,再有相同的调用时省去 NEW 操作。
4.      MiniTemplator+AppString
虽然 MiniTemplator 为我们提供了对象缓存,可每个页面请求均需要读取一个模板文,增加了不必要的 I/O 开销。这个方案是在原第 3 套方案基础上,由 WEB 第一次部署起动时读取模板文件到 getServletContext().setAttribute ,也就是 application 空间,以后每次请求直从 application 取出,在大页量访问量的情况下省去不必要的 I/O 开销。
5.      JSP
这个不用多说,直接用最原始的 jsp 开发方法。
 
有必要说明的是由于 JDynamiTe MiniTemplator 定义的模标签格式不一样,故而使用二个模板文件,总体上模板风格和代码量保持一致。
 
以下是测试结果:
原始时间(纳秒)
刷新次数
JDynamiTe
MiniTemplator
MiniTemplatorCache
MiniTemplator+AppString
JSP
第1次
256096990
75628441
8746473
1642579
37003899
第2次
116019979
9189667
6347633
2501103
452221
第3次
5493805
2500993
1415491
1274319
496462
第4次
2920735
1845188
1677043
782618
501132
第5次
6301250
2275586
3412602
879016
489043
第6次
4249490
2774440
1908338
1682103
504552
平均耗时(2-6次)
26997051.8
3717174.8
2952221.4
1423831.8
488682
 
转换后的时间 ( )
刷新次数
JDynamiTe
MiniTemplator
MiniTemplatorCache
MiniTemplator+AppString
JSP
第1次
0.25609699
0.075628441
0.008746473
0.001642579
0.037003899
第2次
0.116019979
0.009189667
0.006347633
0.002501103
0.000452221
第3次
0.005493805
0.002500993
0.001415491
0.001274319
0.000496462
第4次
0.002920735
0.001845188
0.001677043
0.000782618
0.000501132
第5次
0.00630125
0.002275586
0.003412602
0.000879016
0.000489043
第6次
0.00424949
0.00277444
0.001908338
0.001682103
0.000504552
平均耗时(2-6次)
0.0269970518
0.0037171748
0.0029522214
0.0014238318
0.000488682
 
转换后的时间 ( 毫秒 )
刷新次数
JDynamiTe
MiniTemplator
MiniTemplatorCache
MiniTemplator+AppString
JSP
第1次
256.09699
75.628441
8.746473
1.642579
37.003899
第2次
116.019979
9.189667
6.347633
2.501103
0.452221
第3次
5.493805
2.500993
1.415491
1.274319
0.496462
第4次
2.920735
1.845188
1.677043
0.782618
0.501132
第5次
6.30125
2.275586
3.412602
0.879016
0.489043
第6次
4.24949
2.77444
1.908338
1.682103
0.504552
平均耗时(2-6次)
26.9970518
3.7171748
2.9522214
1.4238318
0.488682
 
 
 
 
结论:
1.      JDynamiTe 是最慢的。由于开发的年代久远, java1.1 版本的的代码制约语言发挥最大效率,在解析过程中且依赖于外部正则库。 ReadLine 的行读取增加不必要 I/O 开销。
2.      MiniTemplator 在采用默认的方案时(第二方案)仍然快过 JDynamiTe ,虽然默认方案也是读取文件,相比 JDynamiTe 的读取方式采取读取缓存到 StringBuilder ,再利用语言自身的正则支持进行解析。从第一眼看到 JDynamiTe MiniTemplator 的代码时,感觉理论上 MiniTemplator 应该更快些。事实也证明的这一点。
3.      MiniTemplatorCache 相比默认的 MiniTemplator 的方案,这种方式节约了 NEW MiniTemplator 对象的时间,快也只是快一点。
4.      MiniTemplator+AppString 这个是这次模板方案里最快的,可以看到虽然只是减少了 I/O 的开销,可是这个效果却是惊人的,通过图示我们可以看到足足比默认方案快了近一倍。如果更进一步采用 MiniTemplatorCache+AppString 的方式,相信会更快一点。
 
最后,冠军当然是 MiniTemplator+AppString 。那 jsp 呢?无疑单纯的 jsp 效率其它模板都比不上,但这样却严重制约了美工制做和后期维护的能力。所以,在稍复杂的 web 应用中,我主张 jsp+html 的模式走开。

csdn的服务器太慢,下不了的朋友请留下E-mail。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值