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

相关文章
|
4月前
|
JavaScript 前端开发 数据挖掘
【揭秘神器】Tornado框架为何能引领Web开发新时代?三大特色让你大开眼界!
【8月更文挑战第31天】Tornado 是一款专为处理大量并发连接而设计的 Python 网络框架,特别适合构建实时 Web 应用,如聊天室、在线协作工具等。本文通过技术综述和示例代码展示了 Tornado 的独特异步处理能力及其在 Web 开发中的应用。Tornado 采用非阻塞 I/O 模型和高效事件循环机制,能够在单线程内处理成千上万个并发连接。通过简单的示例应用,如“Hello, world”和聊天室,详细介绍了 Tornado 的安装、基本应用创建及 WebSocket 支持。这些示例不仅展示了 Tornado 在实时应用中的强大功能,还提供了实际项目中的应用指导。
41 0
|
缓存 NoSQL 前端开发
优质高效!阿里甩出SpringBoot巅峰之作,进阶不二之选
十多年前,Spring颠覆了传统的JavaEE技术,迎来了Java企业级应用开发的春天,然而今天的Spring Boot却站在Spring巨人的肩膀上,让我们可以更高效地开发与交付。Java Web后端也好,App 后台也罢,甚至独立后台应用,等等,Spring Boot 都是你不可或缺的高效率工具。
|
Cloud Native 开发者
KubeVela 获得 2022 “开源新锐”和“开发者最喜爱”双料年度项目
在 InfoQ 最新公布的 2022 中国技术力量年度榜单中,KubeVela 获得了 “十大开源新锐项目” 和 “开发者最喜爱的十大开源项目” 两个大奖。
KubeVela 获得 2022 “开源新锐”和“开发者最喜爱”双料年度项目
|
Dubbo Java 中间件
阿里巴巴有哪些好玩的分布式开源框架?
开源项目起初由国外一些工程师发起,最著名的开源社区及私有软件项目的托管平台GitHub,由国外Chris Wanstrath创办从一个开发者社区变成了一个免费开源代码托管平台;国内越来越多的公司把自研的一些优秀开源框架贡献出来,阿里巴巴、腾讯、百度、网易、当当、携程等公司都有在github上开源一些优秀的项目。其中阿里巴巴的的开源项目很多,几乎国内所有公司都用过阿里巴巴的一些项目,耳熟能详的如:druid、fastjson。分布式流行的当下,阿里也有众多分布式开源项目,今天主要搜罗一下阿里分布式开源项目。
330 0
|
开发工具 图形学 开发者
“俄罗斯讨论自研游戏引擎”解读
“俄罗斯讨论自研游戏引擎”解读
262 0
“俄罗斯讨论自研游戏引擎”解读
|
Ubuntu Linux 开发者
90 后开源老司机徐亮:从大学开始全职做开源是一种怎样的体验?
  “如果你有正确的态度,有趣的事情自然会找到你。”   Eric S. Raymond 在被奉为“开源运动独立宣言”的《大教堂与集市》一文中,总结了 19 条在开源开发中非常有用的理论,上面是其中一条。开源项目总会在不经意间升级,参与者可能最初只是做一些小打小闹的贡献,后来逐步维护越来越重要、越来越多的代码,甚至是负责整个程序。在一个鼓励代码共享的软件文化中,这是一种很自然的项目演化方式。   徐亮在开源社区的经历也遵循着同样的演化路径。从一开始因为兴趣入圈、负责翻译工作,到后来成为Ubuntu、Debian资深官方开放人员,甚至把开源变成一份全职工作,今年已经是徐亮与开源结缘的第 12
456 0
|
设计模式 开发框架 前端开发
十大最主流的PHP框架
十大最主流的PHP框架
268 0
|
PouchContainer 容器
阿里PouchContainer、OpenMessaging两大开源项目惊喜亮相“OSCAR开源先锋日”
10月20日,由中国信息通信研究院主办,云计算标准与开源推进委员会、清华大学TUNA 协会、北京大学开源软件协会承办,云计算开源产业联盟、华为、腾讯、阿里巴巴、小米支持,高效运维社区协办的“OSCAR开源先锋日”在北京完美落幕。
2000 0
|
开发者 项目管理 容器
“画”说开源:这件事,阿里爱了10年 | 开发者必读(089期)
最炫的技术新知、最热门的大咖公开课、最有趣的开发者活动、最实用的工具干货,就在《开发者必读》!
804 0