## 4.8 性能優化
Beetl2.0目前只完成了解釋引擎,使用解釋引擎好處是可以適用于各種場景,性能測試表明,Beetl2.0引擎是Freemaker的4-6倍,跟最好的編譯引擎性能相比,也相差只有30%百分點。為什么Beetl能跑的如此之快呢,簡單的說,有如下策略
- 優化IO輸出,允許使用字節直接輸出,模板中的靜態文本事先轉化為字節
- encode優化,對于number類型,輸出通常是.toString 轉化成String,然后encode輸出,這中間浪費了大量的資源,Beetl實現了encode,輸出一步到位
- Context 采用一維數組,語言里的Context通常采用Map實現,每次進入{} ,就新增一個child Map,盡管map很快,但不夠快。也有其他模板語言采用二位數組提高性能,Beetl是通過固定大小一維數組來維護模板的Context,因此訪問更快,也避免了Map和二維素組的頻繁創建。其實除了此處,beetl很多地方都不采用Map來維護key-value, 而都采用數組索引,以追求性能極限
- 字節碼訪問屬性,通過反射獲取性能比較慢,就算JVM有優化,但優化效果也不確定。Beetl通過字節碼生成了屬性訪問類,從而將屬性訪問速度提高了一個數量級
- 類型推測:Beetl 是強制類型的,因此預先知道類型,可以對模板做一些優化而省去了動態判斷類型的時間
- 使用數組Buffer,避免頻繁創建和銷毀數組
- 編譯引擎將模板編譯成類,會產生大量的類,虛擬機很難對這些做優化。而解釋引擎只有幾十個固定的類,虛擬機容易優化
> #### 相關文章 {docsify-ignore}
>
> - 為什么JSP會比Beetl慢?[http://my.oschina.net/xiandafu/blog/475740](http://my.oschina.net/xiandafu/blog/475740)
> - Beetl 性能揭秘 2 :語言如何存取變量?[http://my.oschina.net/xiandafu/blog/293167](http://my.oschina.net/xiandafu/blog/293167)
> - Beetl 性能揭秘 1 :如何輸出一個整型變量?[http://my.oschina.net/xiandafu/blog/284823](http://my.oschina.net/xiandafu/blog/284823)
> - 如果對Java性能優化有興趣,可以購買這本我寫的書 https://item.jd.com/12742086.html
- Beetl 3 中文文檔
- 第一部分 基礎用法
- 1.1 安裝
- 1.2 快速開始
- 1.3 模板基礎配置
- 1.4 模板加載器
- 1.5 定界符與占位符
- 1.6 注釋
- 1.7 變量定義
- 1.8 屬性
- 1.9 數學表達式
- 1.10 循環語句
- 1.11 條件語句
- 1.12 異常捕獲
- 1.13 虛擬屬性
- 1.14 函數調用
- 1.15 安全輸出(重要)
- 1.16 輸出格式化
- 1.17 標簽
- 1.18 調用Java方法與屬性
- 1.19 嚴格MVC控制
- 1.20 指令
- 1.21 錯誤處理
- 1.22 Beetl小工具
- 1.23 Escape
- 第二部分 高級用法
- 2.1 配置GroupTemplate
- 2.2 自定義方法
- 2.3 自定義格式化函數
- 2.4 自定義標簽
- 2.5 自定義虛擬屬性
- 2.6 使用額外的資源加載器
- 2.7 自定義資源加載器
- 2.8 使用CompositeResourceLoader
- 2.9 自定義錯誤處理器
- 2.10 自定義安全管理器
- 2.11 注冊全局共享變量
- 2.12 自定義布局
- 2.13 性能優化
- 2.14 定制輸出
- 2.15 定制模板引擎
- 2.16 直接運行Beetl腳本
- 2.17 模板校驗
- 第三部分 Web 集成
- 3.1 Web提供的全局變量
- 3.2 集成技術開發指南
- 3.3 Servlet集成
- 3.4 SpringMVC集成
- 3.5 Spring Boot集成
- 3.6 Jodd集成
- 3.7 JFinal4 集成方案
- 3.8 Nutz集成
- 3.9 Struts2集成
- 3.10 整合ajax的局部渲染技術
- 3.11 在頁面輸出錯誤提示信息
- 附錄
- 4.1 內置方法
- 4.2 Spring相關函數
- 4.3 Spring security
- 4.4 shiro
- 4.5 內置格式化方法
- 4.6 內置標簽函數
- 4.7 內置html標簽
- 4.8 性能優化
- 4.9 Eclipse 插件
- 4.10 性能測試對比