在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屬性的指令。
選型方面的區別:
- Velocity采用JavaCC編譯成AST樹,解釋執行。
- FreeMarker類似,只是采用FreeCC。
- Smarty4j采用ASM生成字節碼。
- HTTL采用先將模板轉譯成Java代碼,再由JDK或Javassist編譯成字節碼。 </UL>
- 模板內循環顯示100行數據。
- 每模板各運行一萬次。
- 模板大小約800字符。
- 模板每次運行輸出內容約27K字符。 </UL>
性能測試:
測試結果:
<TABLE style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid" class=bbcode>
更多信息參見:
http://code.google.com/p/httl
HTTL缺省使用Jdk的javax,tools編譯字節碼,需要500ms左右,如果換成Javassist編譯,編譯時間可以降到200ms左右,但字節碼執行效率略差一點,如果想換成Javassist,只需在httl.properties中加入。
注:Javassist不支持1.5的語法,所以要設置java.version=1.4
<DIV class=date>收錄時間:2011-09-14 17:24:54</DIV>