为了配合一下JSEL的发布推广,做了一下性能测试。 说实在的,真不想做这类测试,太无趣了。
首先说明一下,这个表达式测试并不专业,我只是随便拿了一下我们 飞行大亨 Aviator的几个用例随便做的一个测试,吧数据记录一下,希望对大家有个参考价值:
对比的表达式系统有:
测试表达式:
-
- 1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71
-
- 6.7-100>39.6 ? 5==5? 4+5:6-1 : !(100%3-39.0<27) ? 8*2-199: 100%3
-
- i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 ==i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99
-
- i * pi
-
- 1
测试数据模型:
- vars.put("i",100);
- vars.put("pi",3.14f);
- vars.put("d",-3.9);
- vars.put("b",(byte)4);
- vars.put("bool",false);
先来一个总体效果吧: 有图有真相,给大家一个直接的效果吧(1000*1000次运算耗时图,单位为秒)
很明显,数据看不下去了,因为Ognl这个害群之马,太慢了,和别的引擎差距太明显,导致其他的差距看不出来了。
吧害群之马干掉,再看看(没删除干净,是在不好意思,MVEL也有问题,变量处理太慢了):
还是单独看看吧:
JSEL与Aviator消耗对比图
JSEL与MVEL消耗对比图
把MVEL 那个差距最大的去掉,看看其他的差距
原始测试数据 图表上看不清细节,贴一下原始数据:
- Source:1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71
- Aviator:
- value:11181.0
- time:2.660937(s)
-
- MVEL:
- value:11181.0
- time:0.11660712(s)
-
- Ognl:
- value:11181.0
- time:90.7111(s)
-
- JSEL:
- value:11181.0
- time:0.02078729(s)
-
- Source:6.7-100>39.6 ? 5==5? 4+5:6-1 : !(100%3-39.0<27) ? 8*2-199: 100%3
- Aviator:
- value:1
- time:2.1668231(s)
-
- MVEL:
- value:-7
- time:0.33598384(s)
-
- Ognl:
- value:1
- time:82.08548(s)
-
- JSEL:
- value:1
- time:0.020102492(s)
-
- Source:i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 ==i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99
- Aviator:
- value:true
- time:6.8001246(s)
-
- MVEL:
- value:true
- time:115.0054(s)
-
- Ognl:
- value:true
- time:113.09844(s)
-
- JSEL:
- value:true
- time:3.3340743(s)
-
- Source:i * pi
- Aviator:
- value:314.0000104904175
- time:1.9424591(s)
-
- MVEL:
- value:314.0000104904175
- time:5.068285(s)
-
- Ognl:
- value:314.0000104904175
- time:46.878913(s)
-
- JSEL:
- value:314.0
- time:0.28054053(s)
-
- Source:1
- Aviator:
- value:1
- time:1.564514(s)
-
- MVEL:
- value:1
- time:0.11306722(s)
-
- Ognl:
- value:1
- time:40.87699(s)
-
- JSEL:
- value:1
- time:0.013243402(s)
测试代码: http://templatetest./svn/trunk/TT/src/com/googlecode/templatetest/ELTimeTest.java
总结 太晚了,先睡觉,明天再来继续。。。。。
|