Ognl/MVEL/Aviator/JSEL 表达式引擎执行效率对比

为了配合一下 JSEL 的发布推广,做了一下性能测试。
说实在的,真不想做这类测试,太无趣了。


首先说明一下,这个表达式测试并不专业,我只是随便拿了一下我们 飞行大亨 Aviator的几个用例随便做的一个测试,吧数据记录一下,希望对大家有个参考价值:

对比的表达式系统有:
  • 老牌的Ognl(老到网站都找不到了)
  • 新来的MVEL
  • 国产的Aviator
  • 目前最快的JSEL:JSEL


测试表达式:
Java代码 复制代码 收藏代码
  1. //常量运算1
  2. 1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71
  3. //常量运算2
  4. 6.7-100>39.6?5==5?4+5:6-1:!(100%3-39.0<27)?8*2-199:100%3
  5. //变量+常量复合运算
  6. 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
  7. //简单变量处理
  8. i*pi
  9. //简单常量处理
  10. 1
//常量运算1
1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71
//常量运算2
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


测试数据模型:
Java代码 复制代码 收藏代码
  1. vars.put("i",100);
  2. vars.put("pi",3.14f);
  3. vars.put("d",-3.9);
  4. vars.put("b",(byte)4);
  5. vars.put("bool",false);
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/Aviator/JSEL 表达式引擎执行效率对比_第1张图片

很明显,数据看不下去了,因为Ognl这个害群之马,太慢了,和别的引擎差距太明显,导致其他的差距看不出来了。

吧害群之马干掉,再看看(没删除干净,是在不好意思,MVEL也有问题,变量处理太慢了):

Ognl/MVEL/Aviator/JSEL 表达式引擎执行效率对比_第2张图片

还是单独看看吧:

JSEL与Aviator消耗对比图

Ognl/MVEL/Aviator/JSEL 表达式引擎执行效率对比_第3张图片


JSEL与MVEL消耗对比图
Ognl/MVEL/Aviator/JSEL 表达式引擎执行效率对比_第4张图片

把MVEL 那个差距最大的去掉,看看其他的差距

Ognl/MVEL/Aviator/JSEL 表达式引擎执行效率对比_第5张图片

原始测试数据
图表上看不清细节,贴一下原始数据:
Java代码 复制代码 收藏代码
  1. Source:1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71
  2. Aviator:
  3. value:11181.0
  4. time:2.660937(s)
  5. MVEL:
  6. value:11181.0
  7. time:0.11660712(s)
  8. Ognl:
  9. value:11181.0
  10. time:90.7111(s)
  11. JSEL:
  12. value:11181.0
  13. time:0.02078729(s)
  14. Source:6.7-100>39.6?5==5?4+5:6-1:!(100%3-39.0<27)?8*2-199:100%3
  15. Aviator:
  16. value:1
  17. time:2.1668231(s)
  18. MVEL:
  19. value:-7
  20. time:0.33598384(s)
  21. Ognl:
  22. value:1
  23. time:82.08548(s)
  24. JSEL:
  25. value:1
  26. time:0.020102492(s)
  27. 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
  28. Aviator:
  29. value:true
  30. time:6.8001246(s)
  31. MVEL:
  32. value:true
  33. time:115.0054(s)
  34. Ognl:
  35. value:true
  36. time:113.09844(s)
  37. JSEL:
  38. value:true
  39. time:3.3340743(s)
  40. Source:i*pi
  41. Aviator:
  42. value:314.0000104904175
  43. time:1.9424591(s)
  44. MVEL:
  45. value:314.0000104904175
  46. time:5.068285(s)
  47. Ognl:
  48. value:314.0000104904175
  49. time:46.878913(s)
  50. JSEL:
  51. value:314.0
  52. time:0.28054053(s)
  53. Source:1
  54. Aviator:
  55. value:1
  56. time:1.564514(s)
  57. MVEL:
  58. value:1
  59. time:0.11306722(s)
  60. Ognl:
  61. value:1
  62. time:40.87699(s)
  63. JSEL:
  64. value:1
  65. time:0.013243402(s)
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.googlecode.com/svn/trunk/TT/src/com/googlecode/templatetest/ELTimeTest.java

你可能感兴趣的:(Ognl/MVEL/Aviator/JSEL 表达式引擎执行效率对比)