欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

高性能EL——aviator发布2.1.1版本

程序员文章站 2022-04-20 19:00:27
...

    高性能的表达式解释引擎——aviator发布2.1.1,主要做的改进如下:

 

1,性能改进,最新的性能测试表明aviator的性能已经接近甚至超过Groovy 1.8。具体请看这个性能测试报告,当然,性能上跟Fel还是有比较大的差距,这主要跟两者的实现有关,请看这篇《Fel分析》。但是通常带变量的表达式的执行效率也能达到百万级别的TPS,满足绝大多数应用。

 

2,添加调试选项,允许运行时输出生成的字节码查看,设置trace为true就可以:

 AviatorEvaluator.setTrace(true);

 还可以重定向输出:

AviatorEvaluator.setTraceOutputStream(new FileOutputStream(new File("aviator.log")));

 示例:编译表达式a+b的输出如下:

// class version 49.0 (49)
// access flags 33
public class Script_1316438227478_0 extends com/googlecode/aviator/ClassExpression  {


  // access flags 18
  private final Lcom/googlecode/aviator/runtime/type/AviatorJavaType; var_0

  // access flags 18
  private final Lcom/googlecode/aviator/runtime/type/AviatorJavaType; var_1

  // access flags 1
  public <init>()V
    ALOAD 0
    INVOKESPECIAL com/googlecode/aviator/ClassExpression.<init> ()V
    ALOAD 0
    NEW com/googlecode/aviator/runtime/type/AviatorJavaType
    DUP
    LDC "b"
    INVOKESPECIAL com/googlecode/aviator/runtime/type/AviatorJavaType.<init> (Ljava/lang/String;)V
    PUTFIELD Script_1316438227478_0.var_0 : Lcom/googlecode/aviator/runtime/type/AviatorJavaType;
    ALOAD 0
    NEW com/googlecode/aviator/runtime/type/AviatorJavaType
    DUP
    LDC "a"
    INVOKESPECIAL com/googlecode/aviator/runtime/type/AviatorJavaType.<init> (Ljava/lang/String;)V
    PUTFIELD Script_1316438227478_0.var_1 : Lcom/googlecode/aviator/runtime/type/AviatorJavaType;
    RETURN
    MAXSTACK = 4
    MAXLOCALS = 1

  // access flags 17
  // signature (Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;)Ljava/lang/Object;
  // declaration:  execute0(java.util.Map<java.lang.String, java.lang.Object>)
  public final execute0(Ljava/util/Map;)Ljava/lang/Object;
    ALOAD 0
    GETFIELD Script_1316438227478_0.var_1 : Lcom/googlecode/aviator/runtime/type/AviatorJavaType;
    ALOAD 0
    GETFIELD Script_1316438227478_0.var_0 : Lcom/googlecode/aviator/runtime/type/AviatorJavaType;
    ALOAD 1
    INVOKEVIRTUAL com/googlecode/aviator/runtime/type/AviatorObject.add (Lcom/googlecode/aviator/runtime/type/AviatorObject;Ljava/util/Map;)Lcom/googlecode/aviator/runtime/type/AviatorObject;
    ALOAD 1
    INVOKEVIRTUAL com/googlecode/aviator/runtime/type/AviatorObject.getValue (Ljava/util/Map;)Ljava/lang/Object;
    ARETURN
    MAXSTACK = 3
    MAXLOCALS = 2
}

 

3,新增更多内置函数,包括:

 

date_to_string(date,format) 用于格式化Date

string_to_date(source,format) 用于转化字符串为Date

string.join(seq,seperator)  集合或者数组的字符串连接

string.split(source,regex,[limit])   字符串的切割

string.replace_first(source,regex)

string.replace_all(source,regex)  字符串的替换

 

 

如果你用maven,可以直接引用:

		<dependency>
			<groupId>com.googlecode.aviator</groupId>
			<artifactId>aviator</artifactId>
			<version>2.1.1</version>
		</dependency>
 

 

下载地址:

http://code.google.com/p/aviator/downloads/list