天天看點

基于Node.js的模闆引擎大比拼基于Node.js的模闆引擎大比拼

版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/58606201

基于Node.js的模闆引擎大比拼

作者:chszs,未經部落客允許不得轉載。經許可的轉載需注明作者和部落格首頁: http://blog.csdn.net/chszs

本文對基于Node.js的模闆引擎做了一個彙總和對比,具體如下。

Mustache

官網見:

http://mustache.github.io/

Mustache是一個非常簡單易用的模闆引擎,号稱無邏輯的模闆引擎,可以用于HTML、配置檔案、源代碼等等場景。

之是以稱之為無邏輯的模闆引擎,是因為它沒有if語句、else條件、for循環等結構體。隻有标簽,使用值來替換标簽,值可以是哈希或對象,就這麼簡單。

Mustache模闆有兩種定義,Mustache (1)和Mustache (5)

Mustache支援主流的程式設計語言,比如Ruby, JavaScript, Python, Erlang, node.js, PHP, Perl, Perl6, Objective-C, Java,Android, C++, Go, Lua等。

Mustache也可以很好地與編輯器TextMate, Vim, Emacs, Coda, Atom等相結合。

Mustache (1)手冊:<

http://mustache.github.io/mustache.5.html

>

Mustache (5) 手冊:<

http://mustache.github.io/mustache.1.html

>

Mustache (1)的靈感來自于ctemplate,并于2009年底釋出第一版。第一個版本的模闆引擎使用Ruby語言實作,運作YAML模闆文本。采用的主要原則有:一是強調“無邏輯”,沒有顯式的控制流程語句,所有控制都由資料驅動;二是強調“邏輯與表示的分離”,不可能将應用程式邏輯嵌入到模闆中。

Handlebars

官網:<

http://handlebarsjs.com/

Handlebars.js是Chris Wanstrath建立的Mustache模闆語言的擴充。Handlebars.js和Mustache都是無邏輯模闆語言,保持視圖和代碼分離。

一般來說,Handlebars.js模闆的文法是Mustache模闆的超集。

其基本文法可以參考Mustache的幫助頁:<

http://mustache.github.com/mustache.5.html

Handlebars允許模闆被預編譯,并包含到JavaScript代碼中,使得啟動時間更短。

Handlebars不相容Mustache的幾點:

* Handlebars預設不執行遞歸查找,除非在編譯時compat标志必須設定為啟用此功能。使用者應注意,啟用此标志會産生性能成本。

* 不支援可選的Mustache風格的Lambdas表達式。

* 不支援備用分隔符

Dust.js

http://www.dustjs.com/

Dust是一個Javascript模闆引擎,它繼承了ctemplate語言風格,并設計為在伺服器和浏覽器上異步運作。

與其它模闆引擎相比,Dust不是無邏輯的,隻是有較少的邏輯。

*不能在Dust模闆中編寫任意Javascript。但是,您仍然有基本的邏輯運算符,如比較,小于/大于,存在/不存在。這在模闆可讀性和資料控制之間達到平衡。

* Dust鼓勵将邏輯移動到資料模型。可以在模型中建立函數,然後通過模闆調用,可以完全控制模闆如何呈現,而不會使邏輯混亂。

*異步模闆加載,渲染和流式傳輸。故不必預加載模闆。

*可組合模闆,支援部分包含和動态模闆塊,将模闆拼接在一起,實作手動建構布局。

* HTML安全,格式無關。Dust通過安全地轉義資料,防止跨站點腳本攻擊。

*高性能。在性能和功能之間取得平衡。雖然它沒有Mustache那麼快,但它的異步性意味着可以更快地渲染大模闆。

* Dust工作在JavaScript。

Underscore.js

http://underscorejs.org/

Underscore是一個JavaScript庫,提供了一系列有用的函數式程式設計幫助程式,而不擴充任何内置對象。

Underscore提供了超過100個函數,支援map、filter、invoke等特性,以及函數綁定、JavaScript模闆、建立快速索引、深度等價測試等。

doT

http://olado.github.io/doT/

doT并非最易于使用的模闆引擎,但它滿足以下需求:

* 如果模闆引擎在用戶端和伺服器端都需要使用

* 如果模闆需要龐大的邏輯,而且還想讓應用程式跑得很快

* 如果需要預編譯的模闆

Jade

http://jade-lang.com/

使用這個模闆引擎,可以讓代碼寫得更少,開發很輕松。但在Node.js環境使用比較費時,因為必須先把檔案轉換為HTML,再轉換成Jade。

EJS

http://ejs.co/

EJS是CanJS預設的模闆語言,它提供了與Observes的實時綁定的使用。EJS非常易于使用,在模闆中寫入想要的HTML,以及一些表示動态行為的魔法标簽即可。JES不支援block功能。

swig

Swig沒有抽象的HTML文法,但可以用Swig填充Angular.js的文法,支援block功能。

結論

作者喜歡EJS,但選擇哪一個取決于你的實際需求。考慮的第一個優先級是性能,其次是編寫代碼輕松。doT的性能優秀,但它的文法難以掌握。