Beetl 3.0.0.REALEASE 版本发布,Java 模板引擎

栏目: 软件资讯 · 发布时间: 6年前

内容简介:Beetl(发音同Beetle)是一款高性能,全功能,简单易用的Java模板(文本处理)引擎,广泛应用在动态页面,静态内容生成,代码生成,规则引擎等领域,自从2011年以来,一直在维护和改进,是国产里难得一直维护和保持...

Beetl(发音同Beetle)是一款高性能,全功能,简单易用的 Java 模板(文本处理)引擎,广泛应用在动态页面,静态内容生成,代码生成,规则引擎等领域,自从2011年以来,一直在维护和改进,是国产里难得一直维护和保持世界领先的个人开源软件。

3.0 有如重大下改进

  • 支持俩对占位符和定界符,使得Beetl脚本语言更容易融入模板中
  • 去掉了模板中的类型推测功能,简化模板核心代码
  • 更容易的定制语法节点自定义实现,比如在线CMS应用中防止乱写while(true)无限循环
  • 去掉了手写字节码反射增强,改用ASM,既然现在是maven年代,不再纯粹追求jar的体积
  • 其他小特性增加,比如循环中的dataIndex,includeURL标签等等
  • 模板一如继往完全兼容,高级定制需要调整一些包名

如果想快速熟悉Beetl,可以访问在线体验 http://ibeetl.com/beetlonline/

Beetl模板(文本处理)引擎是当今世界跑的最快的模板引擎,及时从JDK6到JDK8,还有一些新生代模板引擎诞生,Beetl仍然是性能王者,如下是一个性JMH能测试结果,来自template-benchmark

Beetl 3.0.0.REALEASE 版本发布,Java 模板引擎

Beetl之所以性能快,根本原因来自Beetl团队这8年的不断维护和对技术的追求。简要总结如下

一:通过字节码生成,代替反射的开销,如User对象的属性访问,生成如下字节码,极大提供了性能(参考此文

public Object value(Object obj ,String attr){
   int code = attr.hashCode();
   switch(code):
   case 97: return ((User)obj).getA();
}

二:变量存放在数组里,而不是向其他模板引擎那样存在Map里,疯狂提高性能,如下模板

var a = 1;
var b = "hello"+a;

对于其他模板内核,是一个Map维护变量表

context.put("a",1);
content.put("b","hello"+context.get("a"));

对于Beetl内核,维护的是一个数组里

vars[0] =1;
vars[1] = "hello"+vars[0];

三 模板静态文本优化

对于JSP或者其他模板,静态文本没有做优化,导致输出静态文本也非常慢,Beetl会合并静态文本,如果允许二进制流输出,甚至提前转化为byte流。如上性能测试并非模拟真实环境,如果真实环境,Beetl性能将是Freemarker的4-6倍。

四 Beetl脚本优化,Beetl会分析AST,对一些生成的节点执行类重新优化以达到性能最优,比如,对于变量user.name,和 user.wife.name执行,都是用VarRef,不过考虑到前者表达式只有一个属性,因此取消了循环,采用了类似循环展开的优化措施。

//user.wife.name,VarRef.java
Attribute[] local = attr;
int len = local.length();
for(int i=0;i<len;i++){
     value = local.execute(context);
}

//user.name,去掉循环,VarRefOptimal.java
localAttr1.execcute(context);

五:由于int,long,double等转字符串需要消耗很多代码,以int为例子,会涉及50行代码和俩次数组分配,Beetl内部做了优化,甚至对于1..1024的int类型,直接缓存对于的char数组,也极大了提高性能

对于Beetl的性能优化和细节优化远不止这些,这也是Beetl能超越Rocker,JSP这种编译成class执行的模板(参考第三方测试),是世界当之无愧最快的模板引擎,也是最酷的模板引擎。

<dependency>
    <groupId>com.ibeetl</groupId>
    <artifactId>beetl</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>

附录:Beetl第一个版本2011年在Sourceforge截图

Beetl 3.0.0.REALEASE 版本发布,Java 模板引擎

Beetl团队先后有20多位开发者对Beetl团队的贡献,他们在Beetl不完善的时候不贬不喷,无论他们生活境遇如何,都在坚持不懈一起完善Beetl,使之成为在中国个人开源里(相对于阿里,百度,京东投入巨资开源)优秀的开源的基础组件,我不擅长表达,借开源中国对他们进行感谢。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

A Philosophy of Software Design

A Philosophy of Software Design

John Ousterhout / Yaknyam Press / 2018-4-6 / GBP 14.21

This book addresses the topic of software design: how to decompose complex software systems into modules (such as classes and methods) that can be implemented relatively independently. The book first ......一起来看看 《A Philosophy of Software Design》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具