阅读更多

9顶
3踩

开源软件
Fel是轻量级的高效的表达式计算引擎。

Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求。

Fel是开放的,引擎执行中的多个模块都可以扩展或替换。Fel的执行主要是通过函数实现,运算符(+、-等都是Fel函数),所有这些函数都是可以替换的,扩展函数也非常简单。

Fel有双引擎,同时支持解释执行和编译执行。可以根据性能要求选择执行方式。编译执行就是将表达式编译成字节码(生成java代码和编译模块都是可以扩展和替换的)
Fel基于Java1.5开发,适用于Java1.5及以上版本。

Fel有多快?

通常情况下,Fel-0.7.1每秒可以执行千万次表达式。速度是Jexl-2.0的20倍以上。
性能可与Java媲美。

目前还没有发现开源的表达式引擎比Fel快。

具体的测试数据请参见:http://code.google.com/p/fast-el/wiki/Performance

为何要使用Fel?

  • Fel语法和API非常简单,语法与Java基本相同,几乎没有学习成本。
  • Fel非常快,上面已经做了简单说明。
  • Fel整个包只有300多KB。
  • Fel可以非常方便的访问数组、集合、Map的元素和对象的属性。
  • Fel可以非常方便的调用对象的方法和类方法(如果这些还不够,可以添加自定义函数)。
  • 扩展Fel非常容易,扩展和修改Fel都非常简单。
项目主页:http://code.google.com/p/fast-el/

下载Fel:http://fast-el.googlecode.com/files/fel-all-0.7.1.jar

备注:附件为性能测试类。

欢迎交流!

9
3
评论 共 35 条 请登录后发表评论
15 楼 lotusyu 2012-04-01 10:58
liuye 写道
测试了一下,fast-el,aviator,mvel,都使用编译模式,fast-el比aviator,mvel快一倍.

我不知道你的测试有没有包含编译时间,测试的表达式是什么。如果不包含编译时间的话,fel在一般情况下要快几倍甚至几十倍。
14 楼 liuye 2012-04-01 10:28
测试了一下,fast-el,aviator,mvel,都使用编译模式,fast-el比aviator,mvel快一倍.
13 楼 xingqiliudehuanghun 2012-04-01 09:46
以前做的一个项目需要蒙特卡洛计算,而计算公式是前端输入的。计算量最少也要几万次。当时试了rhino、beanShell性能都不行,后来没办法了用了janino这动态编译库,把
需要计算的语句直接生成JAVA代码,然后缓存生成的对象,这样效率高了很多。几万次循环也就几个毫秒左右。后来转行做JS了也就没研究过这东西
12 楼 lotusyu 2012-03-31 18:35
t42dw 写道
看了下,很不错!就是不知道稳定不

做过并发测试和内存回收测试,没有发现什么问题。
11 楼 t42dw 2012-03-31 17:44
fresty 写道
与Mvel比较,性能相差很多。
比较代码:
                ------------------Fel-------------------------
System.out.println(System.currentTimeMillis());
for (int i = 0; i < 100000; i++) {
FelEngine fel = new FelEngineImpl();
Object result = fel.eval("5000*12+7500");
tempresult = result;
}
System.out.println(System.currentTimeMillis());
                ------------------mvel------------------------
                System.out.println(System.currentTimeMillis());
for (int i = 0; i < 100000; i++) {
Object o = MVEL.eval("5000*12+7500");
tempresult = o;
}
System.out.println(System.currentTimeMillis());
执行结果:
----------fel-----------
1333171203209
1333171206856
3.65s
----------mvel----------
1333171206856
1333171207909
1.05s

兄弟 FelEngine fel = new FelEngineImpl();放在循环里不公平吧...
10 楼 lotusyu 2012-03-31 16:17
kimmking 写道

2、把fel的预处理时间也算到测试时间的话,性能如何呢
3、跟其他同类的el相比呢

box、unbox是耗时,Fel在执行表达式也有这个操作。
预处理的过程中,编译最耗时。编译好的表达式可后缓存。
比Jexl约快了20倍。
9 楼 小叮当 2012-03-31 15:17
呵呵, 还不如使用动态语言.
8 楼 fresty 2012-03-31 13:22
与Mvel比较,性能相差很多。
比较代码:
                ------------------Fel-------------------------
System.out.println(System.currentTimeMillis());
for (int i = 0; i < 100000; i++) {
FelEngine fel = new FelEngineImpl();
Object result = fel.eval("5000*12+7500");
tempresult = result;
}
System.out.println(System.currentTimeMillis());
                ------------------mvel------------------------
                System.out.println(System.currentTimeMillis());
for (int i = 0; i < 100000; i++) {
Object o = MVEL.eval("5000*12+7500");
tempresult = o;
}
System.out.println(System.currentTimeMillis());
执行结果:
----------fel-----------
1333171203209
1333171206856
3.65s
----------mvel----------
1333171206856
1333171207909
1.05s
7 楼 kimmking 2012-03-31 12:03
2、把fel的预处理时间也算到测试时间的话,性能如何呢
3、跟其他同类的el相比呢
6 楼 kimmking 2012-03-31 12:01
java的测试代码里,那么多的box/unbox,能快的了么?
5 楼 t42dw 2012-03-31 11:41
看了下,很不错!就是不知道稳定不
4 楼 w3kiccp 2012-03-31 11:39
真有那么快吗?
3 楼 bitray 2012-03-31 11:17
看了看主页的介绍.很强大的东西
2 楼 lonelybug 2012-03-31 10:45
我喜欢这种设计风格。

对了,你的bytecode那块用的是ASM?
1 楼 paomo30000 2012-03-31 09:55
又一个groovy?

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • spring的集群问题的疑惑

    现在公司里有一个项目,想做spring的集群,现在他们的做法是一台webserver,比如说tomcat,然后把spring的应用部署到多个applicationserver上,然后webserver通过ejb的rmi来调用applicationserver上的spring程序,...

  • 关于集群的疑惑

    为啥 两个注册中心,彼此互相注册, 服务提供方两个 ,他们都想其中一个甲注册中心注册,为啥甲宕机了,访问还能成功,不该歇菜嘛? 控制台一直报错,服务但还能正常这个是为啥 ...

  • springboot2.1.8/springsecurity借助redis完成session集群管理

    在这之前我是没接触过spring-session的,并且还就真手写过利用jedis操作redis来实现session共享的代码,所以当时为了搞清这块业务,就想当然的一个劲地找jedis操作redis的相关逻辑,最后实在找不到还很疑惑的问一个...

  • SpringCloud-Eureka服务端集群如何同步(5)

    其中第五点涉及到服务器端集群同步问题我们并没有进行深入了解,在这里,我们将进行一次探索。 // 获取集群中的其他节点,注册到当前节点上 int registryCount = this.registry.syncUp(); 二.集群同步 1.为什么要...

  • Spring Boot 集成 Redis 三种模式实践汇总

    项目的某个模块集成了 SpringBoot Redis 包,客户端使用 Lettuce,Redis 测试环境单机模式。但是现场反馈的 Redis 环境是集群,如果简单的修改 `spring.redis` 配置为集群的配置信息,程序能否能无缝衔接呢?

  • SpringSession

    为什么要spring-session比较traditional-session方案和spring-session方案JSR340规范与spring-session的透明继承spring-session提供集群环境下HttpSession的透明集成。spring-session的优势在于开箱即用,具有较强的...

  • 【云原生】Spring Cloud是什么?Spring Cloud版本介绍

    SpringCloud是基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件...

  • spring整合mongodb集群

    很多同学用Spring封装的MongoDB包时都会对多个MongoDB的负载均衡疑惑, Spring到底是如何做负载均衡呢? 由于本文中心不是解析此问题,只做稍微解释:Spring启动了多个线程,每个线程的工作为ping一下要连接的Mongo...

  • 超详细的SpringCloud底层原理

    SpringCloud框架 针对这个架构图我分层介绍一下: 1、是web服务器的选型,这个我选择的是nginx+keepalived,haproxy也是一个选择,但是haproxy在反向代理处理跨域访问的时候问题很多。所以我们nginx有些地方做了...

  • 【SpringCloud】SpringCloud之微服务网关GateWay

    文章目录前言一、SpringCloud GateWay概述1.1 Zuul1.x的缺陷1.2 Spring WebFlux1.3 GateWay工作流程二、GateWay实战2.1 Spring Cloud Gateway中的Predicate介绍2.2 Spring Cloud Gateway中的Filter介绍2.2.1 自定义...

  • 【1.3】Java微服务:Spring Cloud版本说明

    这篇文章主要说明了一些SpringCloud版本的说明和版本兼容的配置方法

  • SpringCloudAlibaba实战-nacos集群部署

    在学习阶段,我们想快速学习SpringCloudAlibaba功能,但总是花费大量时间跟着视频或博客做组件配置。...因此,本篇博客针对这一痛点,进行nacos集群部署记录。关于nacos的理论知识,以及单机版部署网上前人之述足矣。

  • Spring微服务实战第4章 服务发现

    文章目录第4章 服务发现4.1 我的服务在哪里4.2 云中的服务发现4.2.1 服务发现架构4.2.2 使用Spring和Netflix Eureka进行服务发现实战4.3 构建Spring Eureka服务4.4 通过Spring Eureka注册服务4.5 使用服务...

  • 关于Spring集成Quartz的一些小坑

    Spring Quartz

  • SpringCloud-Eureka配置和使用

    SpringCloud-Eureka配置 注意:Eureka新旧版本情况,旧版本已经被弃用,需要(建议)使用新的版本 旧版本:spring-cloud-starter-eureka-server,spring-cloud-starter-eureka 例子如下,如果使用下面这种方法,有...

  • SpringCloud学习笔记

    SpringCloud 内容知识 技术栈对比 服务拆分 远程调用 二、Eureka注册中心 搭建注册中心 服务注册 服务拉取 三、Ribbon负载均衡 源码跟踪 流程总结 负载均衡策略 自定义策略 饥饿加载 四、Nacos注册...

  • Spring Cloud Alibaba 核心组件解析

    Name Server:分布式系统中通过 DNS、VIP(Vritual IP)或者地址来实现集群的服务路由。 Nacos Server:Nacos 服务的提供者。 OpenAPI:提供给外部的功能访问入口。 Config Service:配置服务。 Naming Service:...

  • 你说你会Spring和分布式,那你知道它们怎么演化来的吗?

    知其然更要知其所以然! 现在我们所熟知的微服务,spring,负载均衡,分布式等等技术框架和技术架构,它们的发展都是有着必然联系的。让我们追本溯源,纵览分布式的近20年发展历程。

  • 非常哇塞的 Spring Boot 性能优化长文

    对于如何定位到复杂分布式环境中的问题,我这里想要分享另外一个工具:Skywalking。 Skywalking是使用探针技术(JavaAgent)来实现的。通过在Java的启动参数中,加入javaagent的Jar包,即可将性能数据和调用链数据...

  • 查看进程信息,方便排查问题

    查看进程信息,方便排查问题

Global site tag (gtag.js) - Google Analytics