歡迎您光臨本站 註冊首頁

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

←手機掃碼閱讀     admin @ 2019-06-10 , reply:0

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之所以性能快,根本原因來自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團隊先後有20多位開發者對Beetl團隊的貢獻,他們在Beetl不完善的時候不貶不噴,無論他們生活境遇如何,都在堅持不懈一起完善Beetl,使之成為在中國個人開源里(相對於阿里,百度,京東投入巨資開源)優秀的開源的基礎組件,我不擅長表達,借開源中國對他們進行感謝。


[admin ]

來源:OsChina
連結:https://www.oschina.net/news/107308/beetl-3-0-0-released
Beetl 3.0.0.REALEASE 版本發布,Java 模板引擎已經有165次圍觀

http://coctec.com/news/all/show-post-206794.html