前言
模板引擎,一直以来,个人都比较喜欢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