103 Star 621 Fork 131

闲.大赋(李家智)/Beetl

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Beetl 内核是脚本引擎,Beetl模板会被解析成脚本引擎执行渲染,Beetl脚本引擎本身也可以作为 一些规则,表达式,脚本计算使用,如下是目前近几年还在维护的表达式/脚本引擎的性能测试结果

测试内容有一个简单的求值计算,和一个if语句(spel 不支持if,所以使用了三元表达式)

测试项目

  • simpleExpress ,一个简单的求值表达式 arg.age+(12+arg.pay)
  • ifExpresss 一个if语句.(Spel和JfireEL 不支持,使用了三元表达式代替)
  • reflect 能返回表达式的需要外部传入变量,如表达式arg.age+(12+kk.pay) 返回[arg,kk]
  • forExpresss 循环测试。

测试方法

mvn clean package java -jar target/benchmarks.jar

如果脚本语言没有如上测试项目,则是不支持

Benchmark               Mode  Cnt          Score          Error  Units
Aviator.forExpresss    thrpt    5     525398.696 ±    27189.961  ops/s
Aviator.ifExpresss     thrpt    5    3726179.588 ±   132874.023  ops/s
Aviator.simpleExpress  thrpt    5    3778320.090 ±   122532.674  ops/s
Beetl.forExpresss      thrpt    5    1534072.092 ±    70189.033  ops/s
Beetl.ifExpresss       thrpt    5    4879738.902 ±   178031.649  ops/s
Beetl.reflect          thrpt    5      69098.735 ±   111448.898  ops/s
Beetl.simpleExpress    thrpt    5    4513275.389 ±   336284.514  ops/s
Groovy.forExpresss     thrpt    5     138726.489 ±    11629.723  ops/s
Groovy.ifExpresss      thrpt    5     137266.741 ±    11607.655  ops/s
Groovy.simpleExpress   thrpt    5     138921.490 ±     7511.140  ops/s
Jexl3.forExpresss      thrpt    5     784704.385 ±    36250.222  ops/s
Jexl3.ifExpresss       thrpt    5    4626638.379 ±   107156.370  ops/s
Jexl3.simpleExpress    thrpt    5    3740325.101 ±   162665.992  ops/s
JfireEL.ifExpresss     thrpt    5   27471072.321 ±  2525553.860  ops/s
JfireEL.simpleExpress  thrpt    5   19171430.421 ±  2196028.648  ops/s
Liquor.forExpresss     thrpt    5  376970457.238 ± 12662851.104  ops/s
Liquor.ifExpresss      thrpt    5  587016463.396 ± 33597208.386  ops/s
Liquor.simpleExpress   thrpt    5  415106716.161 ± 12949512.370  ops/s
Magic.forExpresss      thrpt    5      35378.224 ±     2062.149  ops/s
Magic.ifExpresss       thrpt    5    8963604.538 ±   390240.691  ops/s
Magic.simpleExpress    thrpt    5    5948785.593 ±   215081.556  ops/s
Mvel.forExpresss       thrpt    5      11666.909 ±      466.589  ops/s
Mvel.ifExpresss        thrpt    5     221933.234 ±    14768.597  ops/s
Mvel.simpleExpress     thrpt    5     310877.532 ±    16866.247  ops/s
Snel.ifExpresss        thrpt    5   12633739.052 ±   674081.894  ops/s
Snel.simpleExpress     thrpt    5    7101424.524 ±   523315.431  ops/s
Spel.ifExpresss        thrpt    5   18342273.231 ±   917578.666  ops/s
Spel.simpleExpress     thrpt    5   17660176.713 ±   634936.823  ops/s
WastEl.forExpresss     thrpt    5  411984521.816 ± 22584962.426  ops/s
WastEl.ifExpresss      thrpt    5  576750545.597 ± 44349124.380  ops/s
WastEl.simpleExpress   thrpt    5  579483294.975 ± 15145289.882  ops/s

score越大越快。如果以上测试方式有问题,请联系我,我不是对所有的脚本引擎熟悉使用

测试结果(2025-3-22)

WastEl==Liquor>>JfireEL=Spel>>Aviator=Beetl=Snel=Magic=Jexl3 >>Mvel=Groovy>>Nashorn

  • Spel和JfireEL是纯表达式引擎,Beetl,和Aviator,Mvel则是脚本引擎.Groovy,Nashorn是一个新的语言
  • 编译成class的性能远大于解释执行的脚本语言
  • 解释执行提供了语法的灵活性,更完善的出错提示信息
  • reflect 方法是获取表达式需要的外边变量,比如这个对有些业务场景很管用,比如根据表达式可以提示用户需要输入哪些变量,x+y/2, 提示用户需要输入x和y ,目前自有Beetl支持
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/xiandafu/beetl.git
git@gitee.com:xiandafu/beetl.git
xiandafu
beetl
Beetl
master

搜索帮助