在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>

      Engine

      Compile

      Run

      TPS</TR>

      Freemarker

      125ms

      16,934ms

      590t/s</TR>

      Velocity

      110ms

      19,278ms

      518t/s</TR>

      Smarty4j

      78ms

      21,653ms

      461t/s</TR>

      Httl

      547ms

      2,077ms

      4,814t/s</TR>

      Java

      0ms

      2,016ms

      4,960t/s</TR></TBODY></TABLE>


      更多信息參見: 
      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>

 本文由用戶 碼頭工人自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!