Enjoy Template Engine 采用独创的 DKFF (Dynamic Key Feature Forward) 词法分析算法以及独创的DLRD (Double Layer Recursive Descent) 语法分析算法,极大减少了代码量,降低了学习成本,并提升了用户体验。
与以往任何一款 java 模板引擎都有显著的不同,极简设计、独创算法、极爽开发体验,从根本上重新定义了模板引擎,这里是首版发布时的盛况,传送门:JFinal 3.0 发布,重新定义模板引擎
Enjoy 模板引擎专为 java 开发者打造,所以坚持两个核心设计理念:一是在模板中可以直接与 java 代码通畅地交互,二是尽可能沿用 java 语法规则,将学习成本降到极致。
因此,立即掌握 90% 的用法,只需要记住一句话:JFinal 模板引擎表达式与 Java 是直接打通的。
本次 Enjoy 4.8 最重要的改进是引入动态编译技术性能提升 12.9%,性能碾压 Freemarker、Velocity、Thymeleaf, 以下是 Intel Core i7 2.2G 机器上的性能测试结果:
Enjoy 的性能是 Thymeleaf 的 9.68 倍,是 Freemarker 的 3 倍,是 Velocity 的 2.86 倍,由于 Freemarker、Velocity、Thymeleafe 不支持 byte 模式,以上仅测试了 char 模式,在 byte 模式下 enjoy 性能将领先更多倍数。
以上测试使用 Java 基准测试框架 JMH,测试源码:
注意:Enjoy 的运行时编译技术仍然支持动态类型,某些模板引擎在使用 asm/cglib 运行时修改字节码优化性能以后不再支持动态类型,是得不偿失的做法,因为动态类型是现代模板引擎必须的特性
Enjoy 4.8 changelog:
1:新增 FastFieldGetter,支持动态类型的前提下性能提升 12.9%
2:添加 Engine.setFastMode(boolean),用于配置极速模式
3:新增 addDirective(.., .., boolean keepLineBlank) 方法,支持指令独占一行时保留前后空白字符:与输出指令 #() 行为一样
4:#date、#number、#escape 等输出型指令,配置成 keepLineBlank = true
5:优化注释对输出格式的影响,注释与指令处于同一行时保留行尾的换行字符(注释处在独立行时无此问题)
6:优化 FastStringWriter 性能
7:ByteWriter、CharWriter 递归优化为 while 循环
8:优化 #escape 指令性能,StringBuilder 字符串拼接改为直接向 Writer 输出
9:输出指令 Output 去掉对 Boolean 类型的判断
10:添加 Engine.removeSharedObject(...) 方法,可配合 addSharedObject(...) 支持动态切换共享对象,适用更多应用场景
11:添加 JdkEncoderFactory 方便配置 Engine.setToJdkEncoderFactory() 支持 utf8mb4 编码的 emoji 表情
12:改进 Utf8Encoder,在极端情况下碰到无法编码的字符时,抛异常改为输出问号,提升用户体验
13:EngineConfig.getSharedObjectMap() 改为 public 可见性
14:Template 添加无参 renderToString() 方法
15:添加 NullMethodInfo,简化代码提升性能
16:Scope 中的 getGlobal、setGlobal、removeGlobal 支持顶层 data 为 null
17:#set 系列指令放开对于自增、自减表达式的使用限制