超碰8_亚洲国产高清视频_黄频视频_欧美午夜影院_亚洲高清在线视频_成人精品久久久

<b>網站分析:高性能JavaScript模板引擎原理解析</b>

作者: 來源:未知 2012-06-18 21:48:11 閱讀 我要評論 直達商品

  隨著 web 發展,前端應用變得越來越復雜,基于后端的 javascript(Node.js) 也開始嶄露頭角,此時 javascript 被寄予了更大的期望,與此同時 javascript MVC 思想也開始流行起來。javascript 模板引擎作為數據與界面分離工作中最重要一環,越來越受開發者關注,近一年來在開源社區中更是百花齊放,在 Twitter、淘寶網、新浪微博、騰訊QQ空間、騰訊微博等大型網站中均能看到它們的身影。

  本文將用最簡單的示例代碼描述現有的 javascript 模板引擎的原理,包括新一代 javascript 模板引擎 artTemplate 的特性實現原理,歡迎共同探討。

  artTemplate 介紹

  artTemplate 是新一代 javascript 模板引擎,它采用預編譯方式讓性能有了質的飛躍,并且充分利用 javascript 引擎特性,使得其性能無論在前端還是后端都有極其出色的表現。在 chrome 下渲染效率測試中分別是知名引擎 Mustache 與 micro tmpl 的 25 、 32 倍。

  

速度對比

 

  除了性能優勢外,調試功能也值得一提。模板調試器可以精確定位到引發渲染錯誤的模板語句,解決了編寫模板過程中無法調試的痛苦,讓開發變得高效,也避免了因為單個模板出錯導致整個應用崩潰的情況發生。

  artTemplate 這一切都在 1.7kb(gzip) 中實現!

  javascript 模板引擎基本原理

  雖然每個引擎從模板語法、語法解析、變量賦值、字符串拼接的實現方式各有所不同,但關鍵的渲染原理仍然是動態執行 javascript 字符串。

  關于動態執行 javascript 字符串,本文以一段模板代碼舉例:

  

 

  這是一段非常樸素的模板寫法,其中,”” 為 closeTag (邏輯語句閉合標簽),若 openTag 后面緊跟 “=” 則會輸出變量的內容。

  HTML語句與變量輸出語句被直接輸出,解析后的字符串類似:

  

 

  語法分析完畢一般還會返回渲染方法:

  

 

  渲染測試:

  

 

  在上面 render 方法中,模板變量賦值采用了 with 語句,字符串拼接采用數組的 push 方法以提升在 IE6、7 下的性能,jQuery 作者 john 開發的微型模板引擎 tmpl 是這種方式的典型代表,參見: http://ejohn.org/blog/javascript-micro-templating/

  由原理實現可見,傳統 javascript 模板引擎中留下兩個待解決的問題:

  1、性能:模板引擎渲染的時候依賴 Function 構造器實現,Function 與 eval、setTimeout、setInterval 一樣,提供了使用文本訪問 javascript 解析引擎的方法,但這樣執行 javascript 的性能非常低下。

  2、調試:由于是動態執行字符串,若遇到錯誤調試器無法捕獲錯誤源,導致模板 BUG 調試變得異常痛苦。在沒有進行容錯的引擎中,局部模板若因為數據異常甚至可以導致整個應用崩潰,隨著模板的數目增加,維護成本將劇增。

  artTemplate 高效的秘密

  1、預編譯

  在上述模板引擎實現原理中,因為要對模板變量進行賦值,所以每次渲染都需要動態編譯 javascript 字符串完成變量賦值。而 artTemplate 的編譯賦值過程卻是在渲染之前完成的,這種方式稱之為“預編譯”。artTemplate 模板編譯器會根據一些簡單的規則提取好所有模板變量,聲明在渲染函數頭部,這個函數類似:

  

 

  這個自動生成的函數就如同一個手工編寫的 javascript 函數一樣,同等的執行次數下無論 CPU 還是內存占用都有顯著減少,性能近乎極限。

  值得一提的是:artTemplate 很多特性都基于預編譯實現,如沙箱規范與自定義語法等。

  2、更快的字符串相加方式

  很多人誤以為數組 push 方法拼接字符串會比 += 快,要知道這僅僅是 IE6-8 的瀏覽器下。實測表明現代瀏覽器使用 += 會比數組 push 方法快,而在 v8 引擎中,使用 += 方式比數組拼接快 4.7 倍。所以 artTemplate 根據 javascript 引擎特性采用了兩種不同的字符串拼接方式。

  artTemplate 調試模式原理

  前端模板引擎不像后端模板引擎,它是動態解析,所以調試器無法定位到錯誤行號,而 artTemplate 通過巧妙的方式讓模板調試器可以精確定位到引發渲染錯誤的模板語句,例如:

  

debug

 

  artTemplate 支持兩種類型的錯誤捕獲,一是渲染錯誤(Render Error)與編譯錯誤(Syntax Error)。

  1、渲染錯誤

  渲染錯誤一般是因為模板數據錯誤或者變量錯誤產生的,渲染的時候只有遇到錯誤才會進入調試模式重新編譯模板,而不會影響正常的模板執行效率。模板編譯器根據模板換行符記錄行號,編譯后的函數類似:

  

 

  當執行過程遇到錯誤,立馬拋出異常模板對應的行號,模板調試器再根據行號反查模板對應的語句并打印到控制臺。

  2、編譯錯誤

  編譯錯誤一般是模板語法錯誤,如不合格的套嵌、未知語法等。由于 artTemplate 沒有進行完整的詞法分析,故無法確定錯誤源所在的位置,只能對錯誤信息與源碼進行原文輸出,供開發者判斷。


  推薦閱讀

  網絡推廣與紙牌

網絡推廣和玩紙牌,是我天天做的2件事,先說紙牌 .我們無法預知,挪了這張牌,下一張牌是否能夠對我們通關起到關鍵的作用,所以每開一張可以有選擇余地的牌時,總是以嘗試觀望的心態,更或者,再三猶豫再三比較才痛下>>>詳細閱讀


本文標題:<b>網站分析:高性能JavaScript模板引擎原理解析</b>

地址:http://www.brh9h.cn/a/22/20120618/69109.html

樂購科技部分新聞及文章轉載自互聯網,供讀者交流和學習,若有涉及作者版權等問題請及時與我們聯系,以便更正、刪除或按規定辦理。感謝所有提供資訊的網站,歡迎各類媒體與樂購科技進行文章共享合作。

網友點評
我的評論: 人參與評論
驗證碼: 匿名回答
網友評論(點擊查看更多條評論)
友情提示: 登錄后發表評論,可以直接從評論中的用戶名進入您的個人空間,讓更多網友認識您。
自媒體專欄

評論

熱度

超碰8_亚洲国产高清视频_黄频视频_欧美午夜影院_亚洲高清在线视频_成人精品久久久
<code id="0gi0m"><wbr id="0gi0m"></wbr></code>
  • <bdo id="0gi0m"><source id="0gi0m"></source></bdo>
    <button id="0gi0m"></button>
    <code id="0gi0m"><acronym id="0gi0m"></acronym></code>
  • 亚洲国产另类久久久精品极度| 99精品久久久| 精品一区二区日本| 精品日本一区二区三区| 久久久久久国产精品mv| 艳色歌舞团一区二区三区| 在线日本高清免费不卡| 成人综合电影| 一区二区高清视频| 香蕉国产精品偷在线观看不卡| 国产在线一区二区三区四区 | 国产一区二区无遮挡| 久久影院理伦片| 欧美日韩国产综合网| 久久婷婷丁香| 亚洲免费视频一区| 久久av二区| 一区二区三区四区欧美| 一本久道久久久| 欧美一区二区三区四区夜夜大片 | 日韩一级欧洲| 精品视频一区二区三区四区| 中文字幕乱码一区二区三区 | 欧美日韩精品免费观看视一区二区| 欧美fxxxxxx另类| 91国产在线免费观看| 亚洲成人自拍| 久久一区激情| 一区视频在线看| 免费精品视频一区| 国产精品美女久久久| 亚洲一区二区三区免费看| 91在线免费看片| 亚洲三级观看| 欧美精品aa| 欧洲一区二区在线| 97国产超碰| 日韩天天综合| 在线成人性视频| 久久99蜜桃综合影院免费观看| 亚洲美女91| 中国人体摄影一区二区三区| 免费久久99精品国产自| 老司机午夜免费精品视频| 国产精品扒开腿做爽爽爽软件| 欧美精品成人一区二区在线观看 | 国产综合 伊人色| 99精品国产高清一区二区| 亚洲国产高清国产精品| 国产精品国产亚洲精品看不卡15| 99国产精品久久久久老师| 亚洲蜜桃av| 色姑娘综合网| 欧美日韩一区二区三区免费| 国产成人成网站在线播放青青| 中文精品一区二区三区| 欧美成人一区二免费视频软件| 欧美12av| 久久亚洲高清| 免费久久99精品国产自| 国严精品久久久久久亚洲影视| 91国产在线免费观看| 久久精品毛片| 久久国产精品久久w女人spa| 一本久道久久综合婷婷鲸鱼| 91久久黄色| 亚洲欧洲精品一区二区| 黄色亚洲在线| 影音先锋中文字幕一区二区| 亚洲午夜精品福利| 亚洲人体大胆视频| 在线不卡视频| 一区三区视频| 国产日韩欧美一区二区| 亚洲制服少妇| 3d蒂法精品啪啪一区二区免费| 久久午夜电影| 激情伦成人综合小说| 精品999在线观看| 日本不卡在线观看| 日本精品一区二区三区不卡无字幕| 精品网站在线看| 神马影院一区二区三区| 在线丝袜欧美日韩制服| 国产精品二区在线观看| 亚洲美女啪啪| 成人片在线免费看| 免费在线观看一区二区| 五月婷婷综合色| 激情欧美国产欧美| 午夜亚洲性色福利视频| 国产欧美综合精品一区二区| 免费看成人午夜电影| 伊人久久大香线蕉成人综合网| 国产主播一区| 免费亚洲视频| 久久涩涩网站| 国内精品99| 99精品国产一区二区| 久久久久久久久久久久久久一区| 亚洲精品乱码久久久久久蜜桃91| 影音国产精品| 国产原创精品| 激情婷婷久久| 精品在线一区| 亚洲无玛一区| 国产在线精品二区| 欧美日韩在线精品| 99在线免费观看视频| 一区二区三区在线观看www| 91久久久久| 国产综合动作在线观看| 欧美区日韩区| 福利视频久久| 午夜久久久久| 国产在线精品一区二区三区》| 欧美三级网页| 国产综合18久久久久久| 欧美日本韩国一区二区三区| av成人午夜| 欧美日韩国产探花| 国产视频一区二区不卡| 欧美日韩一区二区国产| 国产精品成人观看视频免费| 欧美日韩视频在线一区二区观看视频| 久久国产成人| 国语自产精品视频在线看8查询8| 国产精品嫩草在线观看| 亚洲天堂男人| 日韩欧美在线电影| 裸体一区二区| 欧美日韩精品免费观看视一区二区 | 久久午夜电影| 欧美日韩亚洲一区二区三区在线 | 欧美激情一区二区三区在线视频| 高清视频一区二区三区| 国内精品一区二区| 久草热久草热线频97精品| 日韩视频精品| 欧美片第1页综合| 欧美一区二区三区在线播放| 久久综合久久久| 亚洲欧洲精品一区二区| 一区二区三区观看| 国内视频一区二区| 亚洲女人av| 在线观看视频免费一区二区三区| 水蜜桃亚洲精品| 欧美精品欧美精品系列c| 亚洲一区二区三区精品动漫| 欧美久久一区| 自拍另类欧美| 欧美亚洲精品日韩| 精品国产乱码久久久久久久软件| 久热精品在线| 久久久久国产精品一区三寸| 国产一区二区你懂的| 欧美精品一区三区在线观看| 日韩影视精品| 久久久一本精品99久久精品66| 97人人澡人人爽| 亚洲一区尤物| aa级大片欧美三级| 正在播放亚洲| 亚洲一区二区精品在线| 一二三区精品| 一区二区三区成人精品| 亚洲激情一区二区三区| 精品动漫3d一区二区三区免费版| 欧美精品综合| 在线观看成人av| 亚洲日本视频| 国产一级久久| 久久精品国产第一区二区三区最新章节| 亚洲美女视频在线免费观看| 国产精品毛片| 亚洲欧美日韩视频二区| 3d动漫啪啪精品一区二区免费| 91av一区二区三区| 久久久久久久久一区| 水蜜桃一区二区三区| 一区二区免费在线观看| 欧美日韩视频| 中文精品视频一区二区在线观看| 国产乱码精品| 国产高清精品一区二区三区| 久久亚洲午夜电影| 中文字幕精品—区二区日日骚| 午夜日本精品| 亚洲一区二区三区色| 古典武侠综合av第一页| 蜜桃传媒视频麻豆第一区免费观看 | 国产精品国产精品| 一本久道综合久久精品| 久久久久久久波多野高潮日日| 999国内精品视频在线| 久久伊人一区| 伊人久久亚洲热| 国产精品初高中精品久久| 日韩高清专区|