Fel0.9性能可以媲美JAVA?fel --------cost[5474 ]---value[11181] ------exp[1000+100.0*99-(600-3*15)%((
Fel0.9性能可以媲美JAVA?
fel --------cost[5474 ]---value[11181] ------exp[1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71]java el --------cost[7184 ]---value[11181.0]fel --------cost[116658 ]---value[true] ------exp[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 ]java el --------cost[22579 ]---value[true]fel --------cost[81763 ]---value[295.86196287059323] ------exp[pi*d+b-(1000-d*b/pi)/(pi+99-i*d)-i*pi*d/b]java el --------cost[24632 ]---value[295.86196287059323]fel --------cost[80053 ]---value[ world] ------exp[s.substring(m.d )]java el --------cost[14711 ]---value[ world]fel --------cost[69447 ]---value[3] ------exp[s.substring(1).substring(2).indexOf('world')]java el --------cost[20184 ]---value[3]
? ? 除了无变量的数学运算,其余的均完败于Java...
? ? 再用运行10次,20次的结果,发现结果同上的,但是随着运行次数增多,Fel就会赶上来.个人认为是由于Fel对编译后的表达式进行了缓存,多次执行情况下,节省了解析表达式的时间,但是实际应用中,表达式的公式都是固定的,只是根据参数不同返回不同结果,如果只是对解析的公式缓存而没有直接对结果缓存,Fel还是有很多应用场景的,但是对于不定表达式解析执行,应该不适用...
? ? 希望Fel的测试更加全面些,每次执行参数都是相同的,如果是不同的呢?这样能够免除对结果的缓存...
? ? 另外,单次执行的时候性能确实比Java慢很多,那么他的执行次数与Java相比的性能曲线是什么样的?
? ? 最后,开源软件的产品不是吹出来的,不能只靠标题,应该真实的说明具体适合应用的场景,不适合的情况..如果增加实际生产中对产品的性能提升案例,就更加完美了..
? ? ?提了很多疑问,自己也要上班,不一一测试了,Antlr的词法语法解析还是不错的,据说4版本更强了.
1 楼 lotusyu 2013-03-28 谢谢你能关注Fel,并进行测试。
引用希望Fel的测试更加全面些,每次执行参数都是相同的,如果是不同的呢?这样能够免除对结果的缓存...
带变量的表达式没有对结果进行缓存,如果缓存,变量就没有意义了。
引用 最后,开源软件的产品不是吹出来的,不能只靠标题,应该真实的说明具体适合应用的场景,不适合的情况..如果增加实际生产中对产品的性能提升案例,就更加完美了.
1:对FEL的描述中,哪里有吹的成份,请提示。
2:应用场景:适合大数据量计算。如果对性能没有要求,抛开性能,Fel也算是一个易用的EL。
2 楼 charyle 2013-03-28 lotusyu 写道谢谢你能关注Fel,并进行测试。
引用希望Fel的测试更加全面些,每次执行参数都是相同的,如果是不同的呢?这样能够免除对结果的缓存...
带变量的表达式没有对结果进行缓存,如果缓存,变量就没有意义了。
引用 最后,开源软件的产品不是吹出来的,不能只靠标题,应该真实的说明具体适合应用的场景,不适合的情况..如果增加实际生产中对产品的性能提升案例,就更加完美了.
1:对FEL的描述中,哪里有吹的成份,请提示。
2:应用场景:适合大数据量计算。如果对性能没有要求,抛开性能,Fel也算是一个易用的EL。
再次花时间研究了下,东西搞的不错,但是测试用例不能说明性能问题,尤其通过执行时间的比较判断fel性能比Java高...测试用例存在以下问题:
1.测试的Fel表达式是经过解析的,对于不含有变量的数学表达式,fel经过compile后已经求出结果了,所谓的eval只是拿结果值,而Java确还需要每次进行数学运算,没有可比性...
2.剩余的含有变量的表达式,即使不算编译时间,测试代码中Java方法的eval中,都是从map中拿结果,而Fel是从数组中根据索引拿结果,相当于fel在计算前,先进行了优化,把表达式所用参数在数组位置标识出来了....
所以,fel的性能媲美Java,只是fel进行表达式编译后,形成了Java对象,如果不算编译时间,执行时间确实与Java接近,因为已经生成Java对象,都是方法执行,方法值得借鉴...
易用性确实不错,比较方便,扩展不方便,没有语法词法文件
fel的表达式没有缓存..
3 楼 lotusyu 2013-03-28 charyle 写道
再次花时间研究了下,东西搞的不错,但是测试用例不能说明性能问题,尤其通过执行时间的比较判断fel性能比Java高...测试用例存在以下问题:
1.测试的Fel表达式是经过解析的,对于不含有变量的数学表达式,fel经过compile后已经求出结果了,所谓的eval只是拿结果值,而Java确还需要每次进行数学运算,没有可比性...
2.剩余的含有变量的表达式,即使不算编译时间,测试代码中Java方法的eval中,都是从map中拿结果,而Fel是从数组中根据索引拿结果,相当于fel在计算前,先进行了优化,把表达式所用参数在数组位置标识出来了....
所以,fel的性能媲美Java,只是fel进行表达式编译后,形成了Java对象,如果不算编译时间,执行时间确实与Java接近,因为已经生成Java对象,都是方法执行,方法值得借鉴...
易用性确实不错,比较方便,扩展不方便,没有语法词法文件
fel的表达式没有缓存..
呵呵,那点小秘密都被你看穿了。对于一个不知名的开源软件,都能花时间研究,说明你很认真。其实Fel不只是这些优化,还有局部表达式预执行,减少表达式的访问次数、逻辑运算符短路等。至于扩展,不只是文法文件。有一个明显的例子就是实现大数值计算功能,只是实现了几个类就可以了。