FreeMarker vs Groovy vs Mustache vs Thymeleaf

在这篇文章中,我们将尝试通过示例比较 FreeMarker、Groovy、Mustache、Thymeleaf。

Spring Boot 支持 FreeMarker、Groovy、Mustache 和 Thymeleaf。但是,它们如何相互比较?让我们找出哪个模板引擎最适合 Spring Boot 中的不同用例。

为了这个比较,我创建了四个 Spring Boot 项目并将它们添加到一个父项目中。这样,我可以轻松控制所有四个子项目的依赖关系。此外,我可以一次构建所有这些。您可以在本文末尾找到 GitHub 项目。

每个模板引擎的构建大小

在应用程序部署方面,大小很重要。较小的构建更适合在 CI 平台和生产服务器之间传输。让我们比较一下构建的jar文件大小。为此,我在父项目上运行了` maven clean package` 。这是结果。

如你所看到的,Mustache 是明显的赢家,拥有大约 16MB 的 jar,其次是 Thymeleaf。FreeMarker 并不落后于 Thymeleaf,而 Groovy 则以 21.4 MB 的大小远远落后。

让我们测试每个应用程序的启动时间。此测试是微服务的关键方面之一。但是应用程序启动时间可能会受到很多因素的影响。所以我不得不多次运行这个测试来消除我正在测试的机器的任何偏差。

应用程序启动时间

 

该图向我们展示了 Spring Boot 应用程序的每个变体的启动时间。尽管不同模板引擎之间的差距只有 1 秒左右,但现实世界的差异会大得多。

小胡子从不离开 6 秒大关赢得了这一轮。表现最差的是 Groovy 模板引擎。我认为这与 JAR 大小有关。该引擎在所有四个中具有更长的启动时间。FreeMarker 和 Thymeleaf 正在并驾齐驱。但 FreeMarker 在这方面略占上风。

性能基准比较

现在让我们比较一下引擎本身的性能。我们将在每个模板引擎中呈现以下示例。

 

对于基准测试,  所有四个模板引擎都禁用了模板缓存机制。

以下是 Apache BenchMark 结果。由于 Groovy 的结果有多糟糕,我在对数刻度上制作了这张图。

说起其他三个引擎,它们的表现都差不多。FreeMarker 在 135.002 毫秒内完成了 1000 个请求,而 Mustache 用了 134.002 毫秒。Thymeleaf 在 154.998 毫秒的运行时间内略有下降。

在这种情况下,Mustache 与 Freemarker 并驾齐驱,而 thymeleaf 也不甘落后。Groovy 远远超出了它的范围。

让我们看看这些模板引擎的其他一些方面。

可扩展性

在定制方面,Thymeleaf 是这四个中最好的。通过使用 templateEngine.addDialect() ,开发人员可以在现有方言之上提供他们的方言。

FreeMarker 和 Groovy 可用的选项并不多。Mustache 具有一定的可扩展性,但代价是复杂的变通方法。

比较支持和文档

Groovy 和 Mustache 的文档最不充分。Thymeleaf 具有极好的知名度和出色的文档。互联网上有各种有关百里香的教程。FreeMarker 提供了文档。但他们并不那么健康。

每个模板引擎的学习曲线

FreeMarker 在该类别中排名第一。FreeMarker 的语法简洁易读。任何了解 HTML 的人都可以了解 FreeMarker 模板。第二名是 thymeleaf,因为它使用了自然语言和对各种 IDE 中语法高亮的丰富支持。

Mustache 与 FreeMarker 非常相似,但它使用符号 like # ^ / 而不是 if-else 等自然词。

与其他三个不同,Groovy 完全使用不同的符号来定义模板。这种表示法使某人很难学习此模板。例如,这里是一个在 groovy 模板中生成订单总量的片段。

    div(class: "flex flex-row-reverse p-5") {
        h2(class: "font-medium bg-gray-200 p-2 rounded") {
            yield "Grand Total: "
            span(class: "text-green-600", "$orderEntry.payment.amount")
        }
    }

同样可以像 FreeMarker 中的下面这样简单

    <div class="flex flex-row-reverse p-5">
        <h2 class="font-medium  bg-gray-200 p-2 rounded">
            Grand Total: <span class="text-green-600">${orderEntry.payment.amount}</span>
        </h2>
    </div>

IDE 支持

IntelliJ 中 FreeMarker、Groovy、Mustache 和 Thymeleaf 模板文件之间的丰富 IDE 支持比较

Thymeleaf 和 FreeMarker 在 IDE 领域拥有大量支持。Mustache 通过没有变量支持的插件获得其 IDE 支持。Groovy 模板仅支持 Groovy 基础语言。它也没有任何上下文变量突出显示。

FreeMarker vs Groovy vs Mustache vs Thymeleaf 的可用性

Mustache 模板不会评估简单的内联评估。例如,如果您需要添加两个数字并在模板结果中打印结果,则不能。至少不是没有一些复杂的解决方法。出于这个原因,我将 Mustache 标记为最不可用的模板引擎。

从一开始,Groovy 模板在各个方面似乎都与其他模板相去甚远。无论是从性能还是学习的角度来看,Groovy 都不属于这个话题。此外,与 FreeMarker 和 Thymeleaf 相比,它没有增加任何新价值。

FreeMarker 具有在大多数情况下生成 HTML 的所有基本功能,并且更容易学习。因此,如果您想使用它,这不是一个坏主意。但是,如果您想向模板添加自定义功能,Thymeleaf 是您的最佳选择。

结论

在追求之间的比较自由标记、Thymeleaf、Groovy 和 Mustache,FreeMarker 在性能上占据上风。然而,Thymeleaf 总体上赢得了这场战斗。

这是此比较项目的 github 链接

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值