文档章节

TinyTemplate模板引擎火热出炉,正式开源了~~~

悠悠然然
 悠悠然然
发布于 2014/06/18 17:21
字数 1593
阅读 3172
收藏 41

涉水模板引擎领域,纯属不小心。
在此对以下人员表示强烈感谢与致敬:
@sub jetbrick作者
@sept
@webit webit作者
@罗格林 rythm作者
@闲.大赋 beetl作者
以及许许多多虽然没有列出来,但是在我写tinytemplate时帮助过我的人。

序言

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

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

  1. Antlr词法及语法文件编写非常清晰,对于我这种Antlr盲来说,也可以看得懂,甚至可以照葫芦画瓢修改修改,这个非常重要,在后期进行许当的语法改进,这个就体现出优点了
  2. 代码质量较好,使用sonar进行进行分析,给的结果都还是相当不错的,在作者看过的所有的模板语言中,算上成之选
  3. 语法结构与Velocity的非常接近,这点对我也非常重要,因为我的想法就是velocity语法有相当的接受度,与Velocity语法接近,velocity的一些使用者可以方便的进行切换
  4. 测试用例比较完善,在Tiny模板引擎完成之后,利用其测试用例进行测试发现了好几个BUG,说明还是非常有效果的
  5. 环境搭建容易,直接下载源码,就可以安装成功,可以跑测试用例

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

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

概述

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

  1. 体量小表现在总共不到4000行的代码,去掉解析器近1000行,核心引擎只有不行3000行代码
  2. 性能高表现在与现在国内几款高性能模板引擎如:Jetbrick、webit等引擎的性能相比,近乎伯仲之间,但是比Velocity、Freemarker等则有长足的进步,效率大致是Velocity四倍
  3. 扩展性表现在Tiny框架引擎的所有环境都可以自行扩展,并与原有体系进行良好统一
  4. 易学习表现在Tiny框架概念清晰、模块划分科学、具有非常高的高内聚及低耦合
  5. 使用方式灵活表现在,可以多例方式、单例方式,并可以与Spring等有良好集成

简要特点介绍

  • 类似于 Velocity 的指令方式,相同或相似指令达90%左右
  • 支持静态编译
  • 支持编译缓存
  • 支持热加载
  • 支持可变参数方法调用
  • 支持类成员方法重载
  • 支持函数扩展
  • 采用弱类型方式,对于模板层的代码编写约束更小,模型层怎样变化,模板层的代码调整都非常容易
  • 支持宏定义 #macro
  • 支持布局 Layout

性能

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

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

与其它模板引擎比较

模板引擎名称 性能
功能
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修改

http://my.oschina.net/tinyframework/blog/206718

源码地址:

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

© 著作权归作者所有

共有 人打赏支持
悠悠然然

悠悠然然

粉丝 2389
博文 184
码字总数 360373
作品 14
杭州
架构师
加载中

评论(29)

悠悠然然
悠悠然然

引用来自“阿信SXQ”的评论

最新情况是什么,留下的git地址已经不可用了,对应用户的项目列表里面也没有相关项目,是不是已经放弃了啊
亲,最新的情况已经比发布的时候好太多了。git地址整合到一起了,因此原来的取消了。 现在变成http://git.oschina.net/tinyframework/tiny中的一个子项目了。
阿信sxq
阿信sxq
最新情况是什么,留下的git地址已经不可用了,对应用户的项目列表里面也没有相关项目,是不是已经放弃了啊
悠悠然然
悠悠然然

引用来自“小99”的评论

我现在使用的freemarker,这个可以单独使用吗,比如和freemarker一样,下载一个jar就能使用了

可以
小99
小99
我现在使用的freemarker,这个可以单独使用吗,比如和freemarker一样,下载一个jar就能使用了
红星xx
红星xx
简单看了下 pdf , 楼主有长期使用 模板 的 功底 ,我只能说一声 “做得好”
悠悠然然
悠悠然然

引用来自“乌龟壳”的评论

1.我不太清楚java,但建议你最好的实现方式就是把你的模版转化成jsp,接下来就是jsp的事情了
2.你的模版最好和jsp的比一下看看速度如何,如果太拖后腿就可能不是一个好的实现方式了
....你不懂Java,我搞了10多年java了。不过,我感觉你的意识还是非常好的。 我的模板比JSP要快那么一些。 另外,JSP是与WEB环境耦合的,而模板引擎与WEB环境是没有关系的。 如果转成JSP,不是必须有WEB环境都能用了? 感谢你的回复。
乌龟壳
乌龟壳
1.我不太清楚java,但建议你最好的实现方式就是把你的模版转化成jsp,接下来就是jsp的事情了
2.你的模版最好和jsp的比一下看看速度如何,如果太拖后腿就可能不是一个好的实现方式了
悠悠然然
悠悠然然

引用来自“闲.大赋”的评论

beetl2.0 每秒渲染次数应该在15000左右 13

厉害!!!强力支持Beetl性能提升
闲大赋
闲大赋
beetl2.0 每秒渲染次数应该在15000左右 13
杨鬼
杨鬼
BEETL现在是2.0了.测试下性能啊~
【Java模板语言】TinyTemplate 实战 :Serlvet集成

Writer :BYSocket(泥沙砖瓦浆木匠) 一、什么是TinyTemplate 什么是模板语言? 模板语言是为了使用户界面与业务数据(内容)分离而产生的,并能生成特定格式的文档。 什么是TinyTemplate?...

泥沙砖瓦浆木匠
2015/11/04
0
4
Tiny模板引擎(Velocity Plus)应用示例

把TinyTemplate当成是Velocity的升级版其实也是可以的,毕竟它的语法是基到Veloccity扩展而来的,兼容度在80%以上。 至于TinyTemplate的实例是怎样的,且看下面: 宏的可变参数 在Java中的可...

悠悠然然
2015/02/05
0
8
TinyTemplate(Velocity Plus版)即将火热推出~~~

本来是没有自己写一个模板引擎的计划的,因为按我的理解,一直认识这种“语言”级的引擎,难度是非常大的。总感觉自己的水平不够,因此不敢有这个念头。直到大量使用Velocty的时候,碰到vel...

悠悠然然
2014/06/11
0
11
Tiny快速入门之Web界面快速开发实践

前面讲了基于Tiny做服务,这篇来讲讲用Tiny怎么做界面。f 下面是一些常用的链接,供大家使用: GIT地址(必须是OSC家的):https://git.oschina.net/tinyframework/tiny 问题报告:https://git...

悠悠然然
2014/11/25
0
43
Tiny模板引擎--TinyTemplate

Tiny模板引擎 是一个基于Java技术构建的模板引擎,它具有体量小、性能高和扩展易的特点。 适合于所有通过文本模板生成文本类型内容的场景,如:XML、源文件、HTML等等,可以说,它的出现就是...

悠悠然然
2014/06/18
2.2K
1

没有更多内容

加载失败,请刷新页面

加载更多

Python深体验,常见的数据处理方式(必须要懂的)

1.缺失值处理 - 拉格朗日插值法 input_file数据文件内容(存在部分缺失值): from scipy.interpolate import lagrangeimport pandas as pdimport numpy as npinput_file = './dat...

无也Python
26分钟前
2
0
Spring MVC注解故障追踪记

Spring MVC是美团点评很多团队使用的Web框架。在基于Spring MVC的项目里,注解的使用几乎遍布在项目中的各个模块,有Java提供的注解,如:@Override、@Deprecated等;也有Spring提供的注解,...

Skqing
28分钟前
4
0
区块链入门教程以太坊源码分析cmd包分析

  兄弟连区块链入门教程以太坊源码分析cmd包分析。 ### cmd包概述 * geth 主要Ethereum CLI客户端。它是Ethereum网络(eth主网,测试网络或私有网)的入口点,使用此命令可以使节点作为ful...

兄弟连区块链入门教程
30分钟前
1
0
@Autowired 报红线

代码可正常跑,不过红线看着有点难受,解决方案 使用@Autowired(required=false) 或者@Resource. 这两者区别网上一大堆

斩神魂
35分钟前
3
0
DataTable中检索信息 (C#)

C#_从DataTable中检索信息 存在于内存中的虚拟表DataTable,绑定在数据显示控件后,如果想在再检索其中某些信息,可以利用DataTable.Select方法进行检索,避免了重复的读取数据库。Select方法...

CS-CS01
43分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部