beetl功能与Freemarker功能比较

东西好不好,先比一下功能,拿目前最流行的Freemarker来做比较

完全参考了Freemarker官方文档(2.3.19) 第一列是freemarker官方文档目录,第二列是表示beetl中是否具有同样的功能

通过下列表格,可以看出绝大部分功能,beetl都是支持的

 

功能

是否支持

备注

1.1 简介

支持

 

1.2模板 + 数据模型 = 输出

支持

 

1.3 数据模型一览

支持

 

1.4.1 简介

支持

 

1.4.2 (.1--.4) 指令示例

支持

Beetl中,采用includeFileTemplate标签来include一个文件。Beetl中还支持switch/case

1.4.2.5 处理不存在的变量

支持

不支持询问变量是否存在,但可以通过扩展函数来支持

2.1 基本内容

支持

 

2.2.1 类型 简介

大部分支持

很少使用的节点类型不支持

2.2.2 标量

支持

 

2.2.3 容器

支持

 

2.2.4 方法和函数

支持

可以通过扩展函数来间接支持

2.2.5 其它(节点类型)

不支持

 

3.1 总体结构

支持

 

3.2 指令

支持

 

3.3 表达式

支持

集合操作不支持,但可以通过扩展函数来实现集合操作。

截取字符串也不是内置的,但可以通过扩展函数来实现,如str.subString

3.3.3.1 字符串

支持

 

3.3.3.2 数字

支持

 

3.3.3.3 布尔值

支持

 

3.3.3.4 序列

支持

采用js语法的json格式支持。但不包括支持start..end 这样的方式

3.3.3.5 哈希表

支持

 

3.3.4 检索变量

支持

 

3.3.5 字符串操作

不支持

此语法很奇怪,只能说freemaker复杂了语法

3.3.5.2 获取一个字符

支持

通过扩展函数支持

3.3.6.1 序列操作 连接

支持

通过扩展函数支持

3.3.6.2 序列切分

支持

通过扩展函数支持

3.3.7 哈希表操作 连接

支持

 

3.3.8 算数运算

支持

 

3.3.9 比较运算

支持

 

3.3.10 逻辑操作

支持

 

3.3.11 内建函数

支持

 

3.3.13 处理不存在的值

支持

通过扩展函数支持

3.3.13.1 默认值

部分支持

 

3.3.13.2 检测不存在的值

支持

 

3.3.14 括号

支持

 

3.3.15 表达式中的空格

支持

 

3.3.16 操作符的优先级

支持

无数字范围 这个概念

3.4 插值

支持

 

4.1 自定义指令 (宏)

支持

间接通过标签等支持

4.1.4 嵌套内容

支持

Beetl中主要用在layout标签里

4.1.5 宏和循环变量

支持

 

4.2 在模板中定义变量

支持

 

4.3 命名空间

部分支持

通过扩展函数支持,

4.4 空白处理

支持

Beetl中不需要此额外功能

4.5替换(方括号)语法

支持

 

 

东西好不好,再比一下性能,那被公认为性能良好的Freemarker做比较

性能比较

单线程:

 

还是以常用模板为准(大小6K),循环渲染50000次,需要时间(毫秒为单位)如下

 

Beetl1.2M1 解释执行方式(普通模式),运行三次,分别 1356,1365,1348

Beetl1.2M1编译执行方式(普通模式),运行三次,分别913,922,905

Freemarker分别是1155,1130,1122

Beetl1.2M1允许字节流优化,解释方式执行三次,分别是587,605,610

Beetl1.2M1 允许字节流优化,编译方式执行三次,分别是 385,355,370

简而言之,对beetl做运行时编译,byte输出设定后,渲染5万次6K的模板,性能如下

Freemarker

Beetl

1140毫秒

370毫秒

 

及时不对beetl做任何优化,性能也与Freemarker持平

最后,向给位有志从事开源开发的朋友号召,无论你是工作10+年的老手,还是在学习就读的学生,如果愿意从事beetl开发和维护,我非常欢迎。我用了很多业余的精力去一个人搞一个开源的方方面面的工作,感到非常费神。我希望找一个能力突出,愿意去维护beetl开源的人。有想法可以留言。

相关推荐