Beetl研发自2010年,国内流行Java模板引擎
文档 源码 在线体验 模板性能测试 表达式引擎性能测试 性能优化指南
本次调整
* 修复自从2019年Beeetl2升级到Beetl3,不支持自定义方法提供的Context参数问题修复
public class MyUtil{
// 模板中 ${util.add(1)}
public static int add(int x,Context ctx){ return x+ (Integer)ctx.getGlobal("otherVar")}
}
Maven
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>3.15.12.RELEASE</version>
</dependency>
最新模板性能测试,各个模板引擎均采用最新版本, Score 越大越好
Beetl>Rocker>>Freemarker>>Thymeleaf==Velociy
BenchmarkModeCntScoreErrorUnits Beetl.benchmark thrpt5141912.506 ± 19090.130ops/s Freemarker.benchmarkthrpt5 48062.783 ±9054.282ops/s Handlebars.benchmarkthrpt5 48505.286 ±6078.944ops/s Rocker.benchmarkthrpt5102699.041 ± 11827.123ops/s Thymeleaf.benchmark thrpt5 14495.261 ±1460.815ops/s Velocity.benchmarkthrpt5 12071.498 ±4226.219ops/s
最新规则引擎性能测试,Score 越大越好
JfireEL>> Aviator=Beetl=Jexl3 >>Spel>>Mvel=Groovy>>Nashor
Benchmark ModeCnt ScoreErrorUnits Aviator.forExpresssthrpt5501413.321 ± 4657.336ops/s Aviator.ifExpresss thrpt5 4699456.542 ± 266831.101ops/s Aviator.simpleExpressthrpt5 3868701.018 ±38439.986ops/s Beetl.forExpresssthrpt5 1685875.017 ±28454.020ops/s Beetl.ifExpresss thrpt5 4461489.443 ±78687.317ops/s Beetl.reflectthrpt5 62972.088 ±85785.390ops/s Beetl.simpleExpressthrpt5 4328852.130 ± 144586.699ops/s Groovy.ifExpresssthrpt5119493.364 ± 1472.301ops/s Groovy.simpleExpress thrpt5121724.720 ± 1533.726ops/s Jexl3.forExpresssthrpt5789815.632 ±42390.393ops/s Jexl3.ifExpresss thrpt5 4500714.752 ± 138214.400ops/s Jexl3.simpleExpressthrpt5 3901843.173 ± 125472.114ops/s JfireEL.ifExpresss thrpt528337464.920 ± 291859.385ops/s JfireEL.simpleExpressthrpt518824292.084 ± 103241.504ops/s Mvel.forExpresss thrpt5 11954.857 ± 84.105ops/s Mvel.ifExpresssthrpt5230373.242 ± 1827.288ops/s Mvel.simpleExpress thrpt5316083.646 ± 1320.717ops/s Nashorn.ifExpresss thrpt5 10010.541 ±752.057ops/s Nashorn.simpleExpressthrpt58993.022 ±518.940ops/s Spel.ifExpresssthrpt5850338.540 ±41826.542ops/s Spel.simpleExpress thrpt5636251.839 ±
Beetl.reflect 是指 Beetl 能像 Java 反射那样能查询出表达式结构,变量名