天天看点

TinyTemplate模板引擎火热出炉,正式开源了~~~序言概述性能与其它模板引擎比较

本来是没有自己写一个模板引擎的计划的,因为按我的理解,一直认为这种“语言”级的引擎,难度是非常大的。总感觉自己的水平不够,因此不敢有这个念头。直到大量使用velocty的时候,碰到velocty诸多不尽如人意的地方,但是又无能为力,退回到jsp吧,又心不有甘。于是就期望着寻找一种语法结构接近velocty,但是又没有velocity这些不方便之处的模板语言。于是进到一个模板语言群,一群大佬们个个至少是一个模板语言的作者,于是作者在里面表达了自己的期望,大佬们都介绍了自己的模板引擎,于是作者一个接一个的看源码,看文档。说实际,看文档,感觉都非常不错,都有自己的特色,看语法也都不错,除了一部分自己特别关注的点没有之外,其他部分都非常不错了。但是距离自己的诉求还是有差距,怎么办呢?于是就准备找一个最接近的模板引擎来进行一定的扩展,挑来挑去就挑中了jetbrick这个模板语言。

之所以挑中这个是因为以下几个原因:

antlr词法及语法文件编写非常清晰,对于我这种antlr盲来说,也可以看得懂,甚至可以照葫芦画瓢修改修改,这个非常重要,在后期进行许当的语法改进,这个就体现出优点了

代码质量较好,使用sonar进行进行分析,给的结果都还是相当不错的,在作者看过的所有的模板语言中,算上成之选

语法结构与velocity的非常接近,这点对我也非常重要,因为我的想法就是velocity语法有相当的接受度,与velocity语法接近,velocity的一些使用者可以方便的进行切换

测试用例比较完善,在tiny模板引擎完成之后,利用其测试用例进行测试发现了好几个bug,说明还是非常有效果的

环境搭建容易,直接下载源码,就可以安装成功,可以跑测试用例

好的,挑也挑了,选也选了,就开始编写tinytemplate了,let's go。

三天时间初步写好,又花了一周时间进行完善、测试、文档,于是就有了同学们看到的tinytemplate

tiny模板引擎 是一个基于java技术构建的模板引擎,它具有体量小、性能高和扩展易的特点。 适合于所有通过文本模板生成文本类型内容的场景,如:xml、源文件、html等等,可以说,它的出现就是为了替换velocity模板引擎而来,因此在指令集上在尽量与velocity接近的同时,又扩展了一些velocity不能很好解决问题的指令与功能,在表达多方面则尽量与java保持一致,所以非常的易学易用。

体量小表现在总共不到4000行的代码,去掉解析器近1000行,核心引擎只有不行3000行代码

性能高表现在与现在国内几款高性能模板引擎如:jetbrick、webit等引擎的性能相比,近乎伯仲之间,但是比velocity、freemarker等则有长足的进步,效率大致是velocity四倍

扩展性表现在tiny框架引擎的所有环境都可以自行扩展,并与原有体系进行良好统一

易学习表现在tiny框架概念清晰、模块划分科学、具有非常高的高内聚及低耦合

使用方式灵活表现在,可以多例方式、单例方式,并可以与spring等有良好集成

简要特点介绍

类似于 velocity 的指令方式,相同或相似指令达90%左右

支持静态编译

支持编译缓存

支持热加载

支持可变参数方法调用

支持类成员方法重载

支持函数扩展

采用弱类型方式,对于模板层的代码编写约束更小,模型层怎样变化,模板层的代码调整都非常容易

支持宏定义 #macro

支持布局 layout

tiny模板引擎采用编译方式,执行,因此比velocity、freemarker等第一代模板引擎都快得多。但是由于使用了弱类型的方式,较强类型会稍慢一点,5%左右的性能差异,可以忽略不计。

TinyTemplate模板引擎火热出炉,正式开源了~~~序言概述性能与其它模板引擎比较

上述数据在同一台计算机上测得。

模板引擎名称

性能

功能

velocity

4+倍

velocity有的功能,全部支持,且做了大量扩展的新功能

freemarker

5+倍

说实际用得不是太多,所以功能方面就不便说了,理论上肯定多许多功能

jetbrick

性能略弱之3%左右

tiny采用弱类型,jetbrick采用强类型;jetbrick的附加功能函数比较多,tiny则扩展出一些新的功能,tiny是在学习jetbrick基础之上搞的。

httl

性能略弱之1%左右

tiny采用弱类型,httl采用强类型;功能方面tiny扩充许多弥补velocity不足的功能。

beetl

性能大致是其1.9倍左右

功能方面tiny模板引擎自然会强,但是其市场应用情况较好,基础功能提供得比较多。

其他几种

性能对比看上图

功能方面没有深入了解,因此无法评判。

目前tinytemplate的健壮度还不够好,正在进行测试中。

文档地址:

开发环境搭建:

先下载tiny基础工程并安装之:

https://git.oschina.net/tinyframework/tiny

如果在install过程中有问题,请对比faq修改

<a href="http://my.oschina.net/tinyframework/blog/206718" target="_blank">http://my.oschina.net/tinyframework/blog/206718</a>

源码地址:

<a href="http://git.oschina.net/tinyframework/tiny" target="_blank">http://git.oschina.net/tinyframework/tiny</a>