隨著 web 發(fā)展,前端應(yīng)用變得越來(lái)越復(fù)雜,基于后端的 javascript(Node.js) 也開(kāi)始嶄露頭角,javascript 被寄予了更大的期望,與此同時(shí) javascript MVC 思想也開(kāi)始流行起來(lái)。javascript 模板引擎作為數(shù)據(jù)與界面分離工作中最重要一環(huán),越來(lái)越受開(kāi)發(fā)者關(guān)注,在開(kāi)源社區(qū)中更是百花齊放,在 Twitter、淘寶網(wǎng)、新浪微博、騰訊QQ空間、騰訊微博等大型網(wǎng)站中均能看到它們的身影。
在紅河等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供網(wǎng)站設(shè)計(jì)、做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需定制設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),營(yíng)銷(xiāo)型網(wǎng)站,外貿(mào)網(wǎng)站建設(shè),紅河網(wǎng)站建設(shè)費(fèi)用合理。本文將用最簡(jiǎn)單的示例代碼描述現(xiàn)有的 javascript 模板引擎的原理,包括新一代 javascript 模板引擎 artTemplate 的特性實(shí)現(xiàn)原理,歡迎共同探討。
artTemplate 是新一代 javascript 模板引擎,它采用預(yù)編譯方式讓性能有了質(zhì)的飛躍,并且充分利用 javascript 引擎特性,使得其性能無(wú)論在前端還是后端都有極其出色的表現(xiàn)。在 chrome 下渲染效率測(cè)試中分別是知名引擎 Mustache 與 micro tmpl 的 25 、 32 倍。
除了性能優(yōu)勢(shì)外,調(diào)試功能也值得一提。模板調(diào)試器可以精確定位到引發(fā)渲染錯(cuò)誤的模板語(yǔ)句,解決了編寫(xiě)模板過(guò)程中無(wú)法調(diào)試的痛苦,讓開(kāi)發(fā)變得高效,也避免了因?yàn)閱蝹€(gè)模板出錯(cuò)導(dǎo)致整個(gè)應(yīng)用崩潰的情況發(fā)生。
artTemplate 這一切都在 1.7kb(gzip) 中實(shí)現(xiàn)!
雖然每個(gè)引擎從模板語(yǔ)法、語(yǔ)法解析、變量賦值、字符串拼接的實(shí)現(xiàn)方式各有所不同,但關(guān)鍵的渲染原理仍然是動(dòng)態(tài)執(zhí)行 javascript 字符串。
關(guān)于動(dòng)態(tài)執(zhí)行 javascript 字符串,本文以一段模板代碼舉例:
這是一段非常樸素的模板寫(xiě)法,其中,”” 為 closeTag (邏輯語(yǔ)句閉合標(biāo)簽),若 openTag 后面緊跟 “=” 則會(huì)輸出變量的內(nèi)容。
HTML語(yǔ)句與變量輸出語(yǔ)句被直接輸出,解析后的字符串類(lèi)似:
語(yǔ)法分析完畢一般還會(huì)返回渲染方法:
渲染測(cè)試:
在上面 render 方法中,模板變量賦值采用了 with 語(yǔ)句,字符串拼接采用數(shù)組的 push 方法以提升在 IE6、7 下的性能,jQuery 作者 john 開(kāi)發(fā)的微型模板引擎 tmpl 是這種方式的典型代表,參見(jiàn): http:ejohn.org/blog/javascript-micro-templating/
由原理實(shí)現(xiàn)可見(jiàn),傳統(tǒng) javascript 模板引擎中留下兩個(gè)待解決的問(wèn)題:
1、性能:模板引擎渲染的時(shí)候依賴(lài) Function 構(gòu)造器實(shí)現(xiàn),F(xiàn)unction 與 eval、setTimeout、setInterval 一樣,提供了使用文本訪問(wèn) javascript 解析引擎的方法,但這樣執(zhí)行 javascript 的性能非常低下。
2、調(diào)試:由于是動(dòng)態(tài)執(zhí)行字符串,若遇到錯(cuò)誤調(diào)試器無(wú)法捕獲錯(cuò)誤源,導(dǎo)致模板 BUG 調(diào)試變得異常痛苦。在沒(méi)有進(jìn)行容錯(cuò)的引擎中,局部模板若因?yàn)閿?shù)據(jù)異常甚至可以導(dǎo)致整個(gè)應(yīng)用崩潰,隨著模板的數(shù)目增加,維護(hù)成本將劇增。
本次給大家推薦一個(gè)免費(fèi)的學(xué)習(xí)圈,里面概括移動(dòng)應(yīng)用網(wǎng)站開(kāi)發(fā),css,html,webpack,vue node angular以及面試資源等。**獲取資料
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。