`
charyle
  • 浏览: 166109 次
  • 性别: Icon_minigender_1
  • 来自: 天蝎座
社区版块
存档分类
最新评论

Fel0.9性能可以媲美JAVA?

 
阅读更多

   看到了首页上的Fel0.9发布了,据说性能可以媲美JAVA,我和大家的疑问相同,主要是基于JAVA的软件性能如何超越,于是用官方的代码自己跑了下,就是http://code.google.com/p/fast-el/wiki/Performance网页中的PerformanceTest类,结果如下:

   

fel --------cost[2 ]---value[11181] ------exp[1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71]
java el --------cost[461 ]---value[11181.0]
fel --------cost[7403 ]---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[8819 ]---value[true]
fel --------cost[1923 ]---value[295.86196287059323] ------exp[pi*d+b-(1000-d*b/pi)/(pi+99-i*d)-i*pi*d/b]
java el --------cost[3789 ]---value[295.86196287059323]
fel --------cost[1483 ]---value[ world] ------exp[s.substring(m.d )]
java el --------cost[1777 ]---value[ world]
fel --------cost[1316 ]---value[3] ------exp[s.substring(1).substring(2).indexOf('world')]
java el --------cost[1800 ]---value[3]

  看起来Fel确实比Java快速了.

  但仔细研究测试代码,发现测试基于100 * 1000 * 1000次的循环上的,那么1次执行的速度如何呢,将times变量变为1,采用System.nanoTime()计时,结果如下:

  

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版本更强了.

分享到:
评论
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不只是这些优化,还有局部表达式预执行,减少表达式的访问次数、逻辑运算符短路等。至于扩展,不只是文法文件。有一个明显的例子就是实现大数值计算功能,只是实现了几个类就可以了。
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的表达式没有缓存..
1 楼 lotusyu 2013-03-28  
谢谢你能关注Fel,并进行测试。
引用
希望Fel的测试更加全面些,每次执行参数都是相同的,如果是不同的呢?这样能够免除对结果的缓存...

带变量的表达式没有对结果进行缓存,如果缓存,变量就没有意义了。
引用
  最后,开源软件的产品不是吹出来的,不能只靠标题,应该真实的说明具体适合应用的场景,不适合的情况..如果增加实际生产中对产品的性能提升案例,就更加完美了.

1:对FEL的描述中,哪里有吹的成份,请提示。
2:应用场景:适合大数据量计算。如果对性能没有要求,抛开性能,Fel也算是一个易用的EL。






相关推荐

    表达式引擎fel-0.9版本

    6. **API集成**:Fel-all-0.9.tar.gz文件包含了一个完整的Fel引擎包,很可能提供了方便的Java API,使得开发者能够轻松地将Fel引擎集成到Java项目中,进行表达式的创建、编译和执行。 7. **扩展性**:Fel引擎可能...

    fel计算引擎0.9官方版本.zip

    fel计算引擎0.9官方版本,0.9的版本多了很多方法,支持了大数高精度,maven没有找到直接pom依赖,下载到本地再依赖本地jar包来进行操作

    fel all 0.9 表达式

    Fel是轻量级的高效的表达式计算引擎

    FelEngine Java轻量级计算引擎依赖jar包

    2. **导入项目**:将fel-0.8.jar添加到你的Java项目构建路径中,这通常可以通过IDE的“添加外部JARs”功能完成。 3. **依赖管理**:如果你使用Maven或Gradle等构建工具,可以在pom.xml或build.gradle文件中添加对应...

    Fel Javael表达式引擎

    3. 调用Java方法:Fel可以直接调用Java方法,甚至可以将输出流作为变量传递给Fel,用于输出信息。 4. 自定义上下文环境:用户可以创建自定义的上下文环境,以模拟特定场景,如天气和温度查询。 5. 多层上下文环境...

    Fel 所需jar包

    fel轻量高效的表达式计算引擎jar包

    Fel是轻量级的高效的表达式计算引擎

    Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求。 Fel是开放的,引擎执行中的多个模块都可以扩展或替换。Fel的执行主要是通过函数实现,运算符(+、-等都是Fel函数),所有这些函数都是可以...

    高速 Fel表达式引擎

    Fel(Fast Expression Language)是一种高性能的表达式引擎,旨在满足企业级应用对于表达式处理的需求。它具备快速执行的能力,与ognl等其他流行表达式引擎相比,具有更高的性能。 #### 二、核心概念 - **EL ...

    Fel表达式引擎

    Fel(Fast Expression Language)是一种轻量级、高性能的表达式语言,主要用于在应用程序中进行动态计算和数据操作。它提供了一种简洁的语法,使得开发者可以方便地在运行时评估表达式,从而实现灵活的数据处理和...

    fel-0.8.zip

    在描述中提到,下载fel-0.8.zip后,只需将其解压并将fel-0.8.jar文件放入项目中,意味着fel引擎是一个可直接嵌入到Java应用程序中的库。开发者可以通过引入这个jar文件,轻松地在自己的项目中利用fel进行表达式计算...

    基于Java反射和Fel计算引擎动态导出Excel的实现.pdf

    Fel的执行主要通过函数实现,运算符(+、-等)都是Fel函数,所有这些函数都是可以替换的,扩展函数也非常简单,可以根据性能要求选择执行方式。 知识点4:自定义注解在Excel导出中的应用 在Excel导出中,自定义...

    sunxi-tools-fel-windows

    我自己移植的windows下的sunxitools-fel,可以用于全志cpu的fel模式。cpu调试

    windows下的USB驱动工具zadig+从sd卡启动fel的fel-sdboot.rar文件

    若usb设备不能正常识别,可以用zadig软件给usb设备安装驱动。在烧录荔枝派flash时,往往需要进入fel模式,将fel-sdboot文件写入sd卡能够使荔枝派上电直接进入fel模式,从而使系统检测出usb fel设备。

    Fel表达式引擎.pdf

    Fel表达式引擎是一种高性能的表达式引擎,支持编译执行和解释执行两种模式。它可以处理海量数据,执行速度基本与Java字节码执行速度一样快。 1. FelEngine的使用 FelEngine是Fel表达式引擎的核心组件。用户可以...

    java表达式引擎

    Fel(Fast Expression Language)是开放的、高效的、轻量级的表达式语言。拥有解释执行和编译执行双引擎。Fel在编译执行时,做了很多优化,适合处理海量数据。...Fel基于Java1.5开发,适用于Java1.5及以上版本。

    fel.jar-0.8

    fel-0.8.jar...........................................................................

    felDemo.rar

    FEL是一种轻量级、高效的Java表达式语言,主要用于简化和加速应用程序中的动态计算。在这个demo中,我们看到如何使用FEL来执行特定的逻辑。 描述中的代码片段"FELEngine.instance.eval('$('org.apache.commons.lang...

    bpi-fel-mass-storage-gui4win v1.002.zip

    【标题】"bpi-fel-mass-storage-gui4win v1.002.zip" 是一个用于全志(Allwinner)处理器平台的固件升级工具的压缩包,版本号为1.002。该工具主要是为了方便用户通过图形化界面进行固件的烧录和管理。 【描述】描述...

Global site tag (gtag.js) - Google Analytics