模板引擎

簡介

  • 相對html+js的傳統設計,如今不少網站都採用div&css+標籤化+模塊化的設計。模板引擎必定的語義,將數據填充到模板中,產生最終的的HTML頁面。模板引擎主要分兩種:客戶端引擎和服務端引擎。
  • 客戶端渲染:模板和數據分別傳送到客戶端,在客戶端由JavaScript模板引擎渲染出最終的HTML視圖。將模板渲染放置在客戶端作,能夠下降服務端的壓力,而且若是前端內容分別來自多個後臺系統,而這些後臺的架構各不相同(Java、.Net、Ruby等),則服務器端渲染須要採用不一樣的技術,模板資源沒法共享。
  • 服務端渲染:引擎在服務器端將模板和數據合成,返回最終的html頁面,相對於客戶端渲染,數據存儲更加安全。主要有freemarker、velocity、thymeleaf等。
  • 原理:將顯示與數據分離,其本質是將模板文件和數據經過模板引擎生成最終的HTML代碼。

ZWPF0M5W_CR_NEUY6H46__W

  • 模板引擎以簡單爲主,其主要目的是爲了讓程序開發和美工設計人員分工明確;在代碼生成過程當中減小大量機械重複工做,大大提升開發效率,良好的設計使得代碼重用,後期維護都下降成本。一個好的模板引擎的使用要考慮的方面無外乎:功能是否強大,使用是否簡單,整合性、擴展性與靈活性,性能。

JSP、freemarker、velocity、thymeleaf性能對比

JSP

優勢:

  • 功能強大,能夠寫java代碼
  • 支持jsp標籤(jsp tag)
  • 支持表達式語言(el)
  • 官方標準,用戶羣廣,豐富的第三方jsp標籤庫
  • 性能良好。jsp編譯成class文件執行,有很好的性能表現

缺點:

  • 因爲能夠編寫java代碼,若是使用不當,容易破壞MVC結構

freemarker

FreeMarker是一個用Java語言編寫的模板引擎,它基於模板來生成文本輸出。FreeMarker與Web容器無關,即在Web運行時,它並不知道Servlet或Http。它不只能夠用做表現層的實現技術,並且還能夠用於生成XML、JSP或Java等。css

目前企業中,主要使用FreeMarker作靜態頁面或是頁面展現.html

優勢:

  • 不能編寫java代碼,能夠實現嚴格的mvc分離 
  • 性能很是不錯
  • 對jsp標籤支持良好
  • 內置大量經常使用功能,使用很是方便
  • 宏定義(相似jsp標籤)很是方便
  • 使用表達式語言

缺點:

  • 不是官方標準
  • 用戶羣體和第三方標籤庫沒有jsp多

選擇使用freemarker的緣由:

  • 性能。velocity應該是最好的,其次是jsp,普通的頁面freemarker性能最差(雖然只是幾毫秒到十幾毫秒的差距)。可是在複雜頁面上(包含大量判斷、日期金額格式化)的頁面上,freemarker的性能比使用tag和el的jsp好。
  • 宏定義比jsp tag方便
  • 內置大量經常使用功能。好比html過濾,日期金額格式化等等,使用很是方便
  • 支持jsp標籤
  • 能夠實現嚴格的MVC分離

velocity

優勢:

  • 不能編寫java代碼,能夠實現嚴格的MVC分離
  • 性能良好,聽說比jsp性能還要好些
  • 使用表達式語言,聽說jsp的表達式語言就是學velocity的

缺點:

  • 不是官方標準
  • 用戶羣體和第三方標籤庫沒有jsp多
  • 對jsp標籤支持不夠好

thymeleaf

Thymeleaf是個XML/XHTML/HTML5模板引擎,能夠用於Web與非Web應用。前端

Thymeleaf的主要目標在於提供一種可被瀏覽器正確顯示的、格式良好的模板建立方式,所以也能夠用做靜態建模。你可使用它建立通過驗證的XML與HTML模板。相對於編寫邏輯或代碼,開發者只需將標籤屬性添加到模板中便可。接下來,這些標籤屬性就會在DOM(文檔對象模型)上執行預先制定好的邏輯。Thymeleaf的可擴展性也很是棒。你可使用它定義本身的模板屬性集合,這樣就能夠計算自定義表達式並使用自定義邏輯。這意味着Thymeleaf還能夠做爲模板引擎框架。java

優勢:

  • 靜態html嵌入標籤屬性,瀏覽器能夠直接打開模板文件,便於先後端聯調
  • springboot官方推薦方案

缺點:

  • 模板必須符合xml規範
  • js腳本必須加入/
相關文章
相關標籤/搜索