分享

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

 贾朋亮博客 2015-08-21
为了配合一下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==54+5:6-1 : !(100%3-39.0<27) ? 8*2-199100%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  


测试数据模型:
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);  


先来一个总体效果吧: 
有图有真相,给大家一个直接的效果吧(1000*1000次运算耗时图,单位为秒) 


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

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



还是单独看看吧: 

JSEL与Aviator消耗对比图 




JSEL与MVEL消耗对比图 


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



原始测试数据 
图表上看不清细节,贴一下原始数据: 
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.   
  6. MVEL:  
  7. value:11181.0  
  8. time:0.11660712(s)  
  9.   
  10. Ognl:  
  11. value:11181.0  
  12. time:90.7111(s)  
  13.   
  14. JSEL:  
  15. value:11181.0  
  16. time:0.02078729(s)  
  17.   
  18. Source:6.7-100>39.6 ? 5==54+5:6-1 : !(100%3-39.0<27) ? 8*2-199100%3  
  19. Aviator:  
  20. value:1  
  21. time:2.1668231(s)  
  22.   
  23. MVEL:  
  24. value:-7  
  25. time:0.33598384(s)  
  26.   
  27. Ognl:  
  28. value:1  
  29. time:82.08548(s)  
  30.   
  31. JSEL:  
  32. value:1  
  33. time:0.020102492(s)  
  34.   
  35. 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  
  36. Aviator:  
  37. value:true  
  38. time:6.8001246(s)  
  39.   
  40. MVEL:  
  41. value:true  
  42. time:115.0054(s)  
  43.   
  44. Ognl:  
  45. value:true  
  46. time:113.09844(s)  
  47.   
  48. JSEL:  
  49. value:true  
  50. time:3.3340743(s)  
  51.   
  52. Source:i * pi  
  53. Aviator:  
  54. value:314.0000104904175  
  55. time:1.9424591(s)  
  56.   
  57. MVEL:  
  58. value:314.0000104904175  
  59. time:5.068285(s)  
  60.   
  61. Ognl:  
  62. value:314.0000104904175  
  63. time:46.878913(s)  
  64.   
  65. JSEL:  
  66. value:314.0  
  67. time:0.28054053(s)  
  68.   
  69. Source:1  
  70. Aviator:  
  71. value:1  
  72. time:1.564514(s)  
  73.   
  74. MVEL:  
  75. value:1  
  76. time:0.11306722(s)  
  77.   
  78. Ognl:  
  79. value:1  
  80. time:40.87699(s)  
  81.   
  82. JSEL:  
  83. value:1  
  84. time:0.013243402(s)  


测试代码: 
http://templatetest./svn/trunk/TT/src/com/googlecode/templatetest/ELTimeTest.java 

总结 
太晚了,先睡觉,明天再来继续。。。。。 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多