java freemarker性能_Enjoy 4.8 发布,性能碾压 Freemarker、Velocity、Thymeleaf

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:35   2120   0

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 机器上的性能测试结果:

fe1352a63e4db84350e3b710bf49057e.png

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 系列指令放开对于自增、自减表达式的使用限制

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP