Java模板引擎 httl
在07的時候,寫過一個模板引擎,當時叫CommonTemplate,后來功能越來越多,性能卻越來越差,在金大為發給我性能對比結果后,看到慘不忍睹的差距,就打算拋棄原設計進行重寫,但因工作忙,就擱置了,最近看溫少發了幾個EL和JSON的解析器,有點手癢,就抽了個周未,拿出來再改了改,主要將模板改成了字節碼編譯,并簡化了語法及縮小使用范圍,只針對HTML場景使用,并將名稱改成了HTTL,名字含義是把HTML中的 M(Marker)改成了T(Template),放在GoogleCode上:http://code.google.com/p/httl,性能和Java硬編碼輸出模板內容差不多,比Velocity/FreeMarker等快10倍左右。
語法方面的區別:
發現基于文本指令的,基于HTML標簽的,基于HTML注釋的,都有不少模板引擎實現,
為了標新立異以及使用的直觀性,HTTL采用基于HTML屬性的指令,如:
- <table if="user.role == 'admin'">
- <tr foreach="book in books">
- ...
- tr>
- table>
選型方面的區別:
- Velocity采用JavaCC編譯成AST樹,解釋執行。
- FreeMarker類似,只是采用FreeCC。
- Smarty4j采用ASM生成字節碼。
- HTTL采用先將模板轉譯成Java代碼,再由JDK或Javassist編譯成字節碼。
性能測試:
- 模板內循環顯示100行數據。
- 每模板各運行一萬次。
- 模板大小約800字符。
- 模板每次運行輸出內容約27K字符。
測試結果:
Engine | Compile | Run | TPS |
Freemarker | 125ms | 16,934ms | 590t/s |
Velocity | 110ms | 19,278ms | 518t/s |
Smarty4j | 78ms | 21,653ms | 461t/s |
Httl | 547ms | 2,077ms | 4,814t/s |
Java | 0ms | 2,016ms | 4,960t/s |
更多信息參見:
http://code.google.com/p/httl
HTTL缺省使用Jdk的javax,tools編譯字節碼,需要500ms左右,如果換成Javassist編譯,編譯時間可以降到200ms左右,但字節碼執行效率略差一點,如果想換成Javassist,只需在httl.properties中加入:
- compiler=com.googlecode.httl.support.compilers.JavassistCompiler
- java.version=1.4
注:Javassist不支持1.5的語法,所以要設置java.version=1.4
本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!