FreeMarker、Thymeleaf、Enjoy 模板引擎性能测试

本文作者通过性能测试对比了FreeMarker、Thymeleaf和Enjoy这三个模板引擎在Spring Boot项目中的表现。结果显示,Enjoy在性能上优于Thymeleaf,尽管Thymeleaf声称从3.0开始性能接近FreeMarker。测试还发现,Thymeleaf的打包大小显著大于其他两个引擎。作者指出,尽管Enjoy在性能上占优,但选择模板引擎时还需考虑其他因素,如集成性、IDE支持等。
摘要由CSDN通过智能技术生成

前言

模板引擎,一直以来,个人都比较喜欢velocity,只是这货差不多7年没有更新,虽然前几天抽风似的发布了个2.0版本,但7年的脚步已经落后了。

后来看到Thymeleaf挺不错,个人项目中也有在使用,这不在osc看到一篇文章: 关于Thymeleaf的真相和Thymeleaf开撕上了,最大的糟点应该是性能问题,看来有必要自己做个性能测试来验证下,毕竟下一步还打算在公司正式项目中使用Thymeleaf呢。

声明

本测试仅针对本人个人使用情况,其使用场景、工具、硬件等均有可能对测试结果造成影响。

测试结果只是对本次测试做的一个记录,仅供参考,并不能说明引擎本身的好坏。

在对测试结果总结及模板引擎的选择上,难免会有个人的想法及主观意识,这只是个人选择喜好并不代表对引擎好坏的评判,请勿对号入座。

候选模板引擎

项目中以使用Spring Boot为主,所以测试的模板引擎自然要与其方便整合使用为上。

首先当然是官方提供默认集成的模板引擎了,在使用Spring Initializr工具创建Spring Boot项目时,发现新版本的Spring Boot已经不推荐使用velocity了(其实从spring 4.3开始就不推荐使用了),见下图:
在这里插入图片描述

这样一来官方提供默认集成的就只剩下FreeMarker和Thymeleaf了,听说Thymeleaf从3.0开始性能已大幅提高和FreeMarker相当了,刚好趁这次可以实际对比下。

Enjoy,JFinal出品的模板引擎,可脱离JFinal单独使用,项目地址:http://git.oschina.net/jfinal/enjoy

Beetl,上面文章中和Thymeleaf的开撕对象,项目地址:http://git.oschina.net/xiandafu/beetl2.0 本来想把它也加进去的,只可惜我按照他的 官方文档Spring Boot集成一节中的配置集成starter后,怎么也无法使用,访问页面时后台一直报错,不知道是不是我的使用方法不对:

javax.servlet.ServletException: Circular view path [index]: would
dispatch back to the current handler URL [/index] again. Check your
ViewResolver setup! (Hint: This may be the result of an unspecified
view, due to default view name generation.)

所以到最后测试的模板引擎只有FreeMarker、Thymeleaf、Enjoy这三个了,其它的就不考虑了,毕竟项目中要使用测了才有意义。

测试流程

因为使用Spring Boot,所以都是Spring Boot项目。

Thymeleaf号称使用SpringEL比使用ognl更快,这样对他也算公平。只是Spring Boot到现在默认集成的都是Thymeleaf 2.x版本,将版本号改成3.x版本之后不知道是否有影响。

配置文件中缓存配置统一设置为true,因为在Spring Boot中不使用DevTool的情况下Thymeleaf默认就是true开启缓存的,而FreeMarker默认是false不开启缓存的,当然Enjoy就没有这个配置了,在代码中把DevMode设置为false。

都使用Spring Boot的main方式启动项目,JVM参数统一设置为:-Xms512m -Xmx512m

为避免web容器的启停造成的内存波动,重启系统后打开所有项目并启动容器后再进行测试,三个项目使用三个不同的端口。这里不计算项目启动本身内存的占用。

启动项目后浏览器先进行一次访问,让项目完成第一次的编译加载。

测试工具

上面的文章提到使用了TEB

这里就换一个工具测测,使用wrk来测试web项目的实际吞吐量。

测试代码

这里列出主要代码,下面附有各个项目的下载地址,可下载后查看其它配置项。

Controller代码,渲染100条列表记录:

@Controller
public class TestController {
   

    private List<User> users = new ArrayList<>();

    public TestController
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值