高性能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>
下载地址:
上一篇: Servlet的详解
下一篇: EL表达式处理字符串