概括 新一代模板语言

十几年来,企业应用,互联网应用后端技术发生了很多变革,从分布式到Without EJB,从Database到Nosql,公司成本得到了很大降低。然而,对于架构师来说,同样至关重要前端技术,仍然没有变化,无非还是JSP技术,或者采用模板引擎,如Freemarker,Velocity。前端对于与产品以及和作为产品实现者开发人员来来说,仍然是费时费力一块,君不见,错误的使用前端技术,将抵消后台优化带来的用户体验,不适当的使用前端技术,将成倍增加开发和维护时间,尽管架构师们意识到到此问题,但可选方案几乎没有。这种现象长时间未曾变化!

Beetl作为新一代的模板技术,试图进一步提高前端开发效率和运行效率,从而节约公司时间成本和硬件成本,他提供如下特性。

采用Javascript语法,对于程序开发人员或者前端设计人员来来说,学习成本为零.。相比与其他模板技术自己的独特语法来说,无疑提高了学习效率和开发效率
   

能在运行时编译成java class代码,能提高运行效率以及减少对系统资源如CPU消耗,内存使用,以及减少垃圾回收次数。能克服其他模板语言运行效率不理想或者消耗主机资源过多的情况.

Beetl同时支持模板中文本的字节输出,省去了字符串转码过程,极大地提高了性能和降低了对CPU的消耗

   
大型公司和小型公司,对于MVC模式都有不同的策略。在大公司,View通常是专门开发人员,或者前端人员来完成,因此不允许将逻辑放到视图层来处理,而小型公司,开发人员负责了MVC所有部分。因此对于View层的技术,需要一个灵活的可定制的模板语言。Beetl正式这样的模板语言,它可以定制策略,可以允许严格的MVC,也可以使用非严格的MVC,甚至还允许直接调用java类代码(后门)。


除了以上三个显著不同于别的模板语言外,Beetl还胜在功能上,还提供如下特性

  • 整个大小410K,其他模板语言有的功能,Beetl基本上都包含(参考比较
  • 双引擎,包含了解释执行引擎,也包含了运行时编译引擎.即适合代码生成,也适合高并发,大访问量的电商网站.编译引擎采用了类型推测,不需要用户在模板中申明变量的类型,能在运行时刻获知并编译
  • 详细的错误提示,包括行数,错误符号,以及上下相关行,以及错误原因,错误文件名
  • beetl提供安全输出,在意外情况下,页面仍然能得到渲染
  • 自定义函数,格式化函数,标签库。允许自定义虚拟属性,无需在java代码中为Pojo添加额外属性专门用于显示
  • 自定义占位符号,控制语句符号,将对模板的侵入性降到最低
  • 输出不会产生多余的空格和换行。其他模板语言或者JSP将不可避免的产生此问题
  • 支持单独测试,在MVC体系中,缺少C和M,也能单独测试V,即beetl模板
  • 与Servlet,Spring MVC,Struts2,JFinal等框架整合

News:

2013-01-30

1.2.0版本正式发布,验证了功能和性能

2012-11-18

1.2Beta完成,重构了内核,增加了多个函数,修复了一些Bug

2012-8-29

加入对国内web开发框架Jfinal支持。使用Config类来简化GroupTemplate创建,修复了一系列bug

2012-6-10

再次优化了beetl,针对模板里的文本(String),预先存放为byte,这样,在使用OutpuStream输出的时候,无需再转码,这样性能提高一倍

在循环渲染50000次的情况下,性能如下

beetl1.2M1 允许byte输出:1100 (毫秒)
beetl1.2M1 普通输出 2700(毫秒)

freemarker 2.3.1 :2500 毫秒

显然Beetl将更具有优势,更快的性能,输出时候更低的CPU消耗(因为不需要做Encode了)

 

2012-6-3:

启动Beetl1.2M1,性能经过测试。对于一个6k的模板,(为了方便比较性能,此模板几乎都是普通文本),循环调用10000次,性能比较如下

beetl1.1 (解释执行) 563毫秒
beetl1.1 (编译执行) 112 毫秒
beetl1.2M1 (解释执行)172毫秒

freemarker 2.3.1 312 毫秒

显然beetl具有优势,即使在未才有优化模式的情况下