HTTL

HTTL

HTTL(Hyper-Text Template Language)是一款基於Java的開源模板引擎,主要用於動態生成HTML頁面,旨在替代JSP技術,其指令語法與Velocity模板引擎相似。該引擎於2007年啟動開發,2012年發布1.0版本,通過編譯模板為Java位元組碼實現高性能渲染,速度接近原生Java代碼,較Velocity提升約十倍。

HTTL採用強類型推導機制減少反射操作,支持#set、#if、#for等基礎指令,並允許變數類型聲明以實現IDE代碼補全。其微核心架構支持外掛程式擴展,可通過配置檔案適配Servlet、SpringMVC等框架。開發者梁飛(阿里巴巴Dubbo設計者)主導了HTTL的架構設計,強調模板邏輯與業務代碼分離,通過HTML注釋語法保持頁面結構完整。後續版本持續最佳化語法兼容性與性能,如1.0.0版本修復循環控制缺陷並改進編譯機制。

基本介紹

  • 中文名:超文本模板語言
  • 外文名:Hyper-Text Template Language
  • 服務語言:JAVA
  • 使用場景:WEB頁面渲染
名詞解釋,原理,模板語法,性能最佳化,設計與實現,

名詞解釋

HTTL是一個適用於HTML輸出的開源JAVA模板引擎,可用於替代JSP頁面,它的指令類似於Velocity。

原理

HTTL採用類似於JSP的原理,將模板編譯成Java位元組碼運行,但比JSP的EL更進一步,使用強類型推導,減少運行期反射和轉型,更加快速。

模板語法

HTTL只有六個指令:#set, #if, #else, #for, #break, #macro,並且不會增加。
語法儘可能符合HTML和JAVA開發者的直覺,指令和老牌的Velocity類似,但改進了Velocity中不符合直覺的地方。 只保留最基本的條件疊代控制指令,渲染過程不允許修改原始數據,防止模板帶過多業務邏輯。默認使用HTML注釋語法,避免干擾原生HTML頁面。
改進Velocity不符合直覺的地方:
  • 指令中的變數不用加$符,如:#if(a == b),而不像Velocity那樣:#if($a == $b),加$有點廢話,容易忘寫。
  • ${x}當變數為null時,輸出空白串,而不像Velocity那樣:輸出源碼${x},如果用$!{x},感嘆號容易忘記寫。
  • 支持在輸出時進行表達式計算,如:${i + 1},而不像Velocity那樣:要先#set($j = $i + 1)到一個臨時變數。
  • 採用更直觀的方式,調用靜態工具方法,如:${"a".toChar},而不像Velocity那樣:$(Tool.toChar("a"))。

性能最佳化

將模板編譯成JAVA位元組碼運行,並使用強類型推導,減少運行期反射和轉型, 渲染速度接近Java硬編碼輸出,比Velocity等其它模板引擎快一個數量級。 比JSP也快,因為JSP只有Scriptlet是編譯的,Tag和EL是解釋執行的,而HTTL是全編譯的。

設計與實現

模板自描述,在模板內聲明入參變數類型,並基於入參類型推導模板內所有變數類型,使IDE能方便的實現變數方法補全提示, 對開發過程友好。出錯信息精確定位行列,並顯示出錯位置前後相關內容。採用微核+外掛程式體系,所有環節均可擴展,方便集成和二次開發。
嚴格確保質量,請放心使用,HTTL在發布前已做:
  • 所有語法指令函式模板單元測試,確保所有模板指令的解析和執行正確。
  • 性能對比基準測試,確保性能接近Java硬編碼輸出,高出其它引擎一個數量級。
  • 長時間運行穩定性測試,確保不出現FullGC,記憶體溢出,死鎖,CPU占滿,抖動等。
  • 記憶體占用和CPU耗時Profiler分析,確保不出現非預期的記憶體和CPU瓶頸。
  • Web套用集成測試,確保在SpringMVC,Struts,Webx等集成中可用。
  • 環境兼容性測試,確保在Liunx,Windows,OSX,JDK1.5,1.6,1.7等環境可用。
  • FindBugs代碼問題檢測,確保不出現空指針,資源未關閉等明顯錯誤。
  • JDepend分包依賴檢測,確保分包依賴的合理性。

熱門詞條

聯絡我們