精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (6)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-09
最后修改:2010-08-09
JSEL的发布推广,做了一下性能测试。
为了配合一下说实在的,真不想做这类测试,太无趣了。 首先说明一下,这个表达式测试并不专业,我只是随便拿了一下我们 飞行大亨 Aviator的几个用例随便做的一个测试,吧数据记录一下,希望对大家有个参考价值: 对比的表达式系统有: 测试表达式: //常量运算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 测试数据模型: 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.googlecode.com/svn/trunk/TT/src/com/googlecode/templatetest/ELTimeTest.java 总结 太晚了,先睡觉,明天再来继续。。。。。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-08-09
说一声,图全都挂了,结果全没
|
|
返回顶楼 | |
发表时间:2010-08-09
kjj 写道 说一声,图全都挂了,结果全没
这个比较奇怪,我这里所有浏览器都正常的。换个浏览器试试 |
|
返回顶楼 | |
发表时间:2010-08-09
这个执行效率的比较暂时停留在表达式求值领域,不知道在下面2个领域的表现如何:
1. 在复杂的对象树的求值上(多级对象级联、包含数组等) 2. 反向设值的过程 —— 通过表达式+字符串,往Java对象中设值 |
|
返回顶楼 | |
发表时间:2010-08-09
downpour 写道 这个执行效率的比较暂时停留在表达式求值领域,不知道在下面2个领域的表现如何:
1. 在复杂的对象树的求值上(多级对象级联、包含数组等) 2. 反向设值的过程 —— 通过表达式+字符串,往Java对象中设值 这确实是一个不够完善的测试数据。 差距确实也很明显,我想其他的数据应该类似吧。 我们也没有必要太纠葛于表达式性能了。多重视易用性更合适一点。 人家ognl慢又怎么样,慢你成百上千倍,近十年来,大家不也用的挺爽的,没有那个说要再快点嘛。呵呵。 |
|
返回顶楼 | |
发表时间:2010-08-09
jindw 写道 downpour 写道 这个执行效率的比较暂时停留在表达式求值领域,不知道在下面2个领域的表现如何:
1. 在复杂的对象树的求值上(多级对象级联、包含数组等) 2. 反向设值的过程 —— 通过表达式+字符串,往Java对象中设值 这确实是一个不够完善的测试数据。 差距确实也很明显,我想其他的数据应该类似吧。 我们也没有必要太纠葛于表达式性能了。多重视易用性更合适一点。 人家ognl慢又怎么样,慢你成百上千倍,近十年来,大家不也用的挺爽的,没有那个说要再快点嘛。呵呵。 jsel支持设值吗? 另外比较关注,lz能不能讲讲 jsel的设计~ thx lz跟我的名字比较像 |
|
返回顶楼 | |
发表时间:2010-08-09
我觉得还是能说明点儿问题的。
|
|
返回顶楼 | |
发表时间:2010-08-09
kimmking 写道 jindw 写道 downpour 写道 这个执行效率的比较暂时停留在表达式求值领域,不知道在下面2个领域的表现如何:
1. 在复杂的对象树的求值上(多级对象级联、包含数组等) 2. 反向设值的过程 —— 通过表达式+字符串,往Java对象中设值 这确实是一个不够完善的测试数据。 差距确实也很明显,我想其他的数据应该类似吧。 我们也没有必要太纠葛于表达式性能了。多重视易用性更合适一点。 人家ognl慢又怎么样,慢你成百上千倍,近十年来,大家不也用的挺爽的,没有那个说要再快点嘛。呵呵。 jsel支持设值吗? 另外比较关注,lz能不能讲讲 jsel的设计~ thx lz跟我的名字比较像 设值是支持的: 现在的JSEL命令行工具就是用到了JSEL的设值功能。 http://code.google.com/p/lite/wiki/CPEL 曾经也用它来做国类似webwork的servlet 参数=》JavaBean属性的自动转换,我想,用它来代替Struts2的OGNL应该也没什么问题吧,只是目前还没有试过。 JSEL的设计,有时间在专门写个帖子吧,呵呵 |
|
返回顶楼 | |
发表时间:2010-08-09
不一定要图呀 出个表格多好呀 图悬殊太大真是没法看
|
|
返回顶楼 | |
发表时间:2010-08-09
最后修改:2010-08-09
说一下总结吧,从目前的测试数据看,除Ognl差距最大外,其他几个系统都只有几倍的差距,可以认为是同一个数量级。
下面我发表一下个人的看法吧,仅供参考 MVEL2.0 有字节码优化,性能与Aviator相当,大多数情况下略快,但是也有超级慢的时候,特别是变量访问速度非常之慢,和Ognl有的一拼,最要命的是,在三目运算符处理的过程中有bug,导致和js规则,其他模板系统结果不同(或许是自身语法比较特殊,即使如此,也是不应该的)。 Aviator 有字节码优化,目前没发现什么大问题,不过,据作者报料,这个项目可能休眠下去。 JSEL 没有字节码优化,性能依然是最佳的,他也有一些表达式结构上的优化策略,比如,静态处理部分,将预处理成静态值,不会每次都重复计算。目前JSEL是Lite模板默认的表达式引擎,后续的维护会有更好的保障。 |
|
返回顶楼 | |