js 模板引擎 為什麼選擇 dot

來源:互聯網
上載者:User

我的上篇博文詳細介紹了jquery tmpl,因為我想在我的項目裡引入JS模版,所以就研究了一下,有人告訴我這個引擎的速度很慢,於是我又去搜集了一下資料,結果發現jquery tmpl是最慢的,於是乎我就放棄了,對比下來發現勝出的有以下幾種artTemplate,dot,juicer三個從速度上勝出(chrome),但是在IE下最終選擇了dot,dot的檔案是最小隻有5K(沒有壓縮),並且在IE裡也是最快的。 下面介紹下dot的用法,其實用法非常簡單 dot的API裡有以下幾種標籤 //{{ }} JS原生態代碼//{{= }} 變數運算,賦值 {{=it.f1 + it.f2}}//{{! }} 賦值並且編碼//{{# }} //{{## #}} 上面兩個沒有仔細研究,基本我也不用它//{{? }} 條件陳述式 //{{~ }} 迴圈 其實條件陳述式和迴圈可以用{{if}}{{else if}}{{for(var i=0;i<length;i++)}}來代替,也就是JS的原生態代碼 那麼我們用到的只有前三種標籤就完全夠用了,下面給出一個例子,就很容易看明白了   複製代碼<script id="tmpl-demo" type="text/tmpl">        {%if($data.suc){%}            {%for (var i = 0; i < $data.users.length; i++) { %}                {%var user=$data.users[i];%}                <div style="margin-bottom:10px;">                    <span style="margin-left:10px;">{%= user.Name%}</span>                    {%! user.url%}{%=global%}                </div>            {%}%}            {%each($data);%}        {%}%}    </script><script type="text/javascript">function demo() {    var fn = doT.template($("#tmpl-demo").html());    $("#demo").append(fn(data));}</script><div id="demo"></div>複製代碼    可能是有人疑問,不是{{}}嗎,其實dot允許自訂包括的標籤,這樣就會讓你使用自己喜歡的模版標籤 如,他的本來的設定是這樣的,是不是很容易修改 複製代碼 var doT = {            version: '1.0.1',            templateSettings: {                evaluate: /\{\{([\s\S]+?(\}?)+)\}\}/g,                interpolate: /\{\{=([\s\S]+?)\}\}/g,                encode: /\{\{!([\s\S]+?)\}\}/g,                use: /\{\{#([\s\S]+?)\}\}/g,                useParams: /(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g,                define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,                defineParams: /^\s*([\w$]+):([\s\S]+)/,                conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g,                iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,                varname: '$data',                varoption: '$item',                strip: true,                append: true,                selfcontained: false            },            template: undefined, //fn, compile template            compile: undefined  //fn, for express        }, global;複製代碼  我修改完就是下面這樣的,非常簡單 複製代碼var doT = {        version: '1.0.1',        templateSettings: {            evaluate: /\{\%([\s\S]+?(\}?)+)\%\}/g,            interpolate: /\{\%=([\s\S]+?)\%\}/g,            encode: /\{\%!([\s\S]+?)\%\}/g,            use: /\{\%#([\s\S]+?)\%\}/g,            useParams: /(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g,            define: /\{\%##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\%\}/g,            defineParams: /^\s*([\w$]+):([\s\S]+)/,            conditional: /\{\%\?(\?)?\s*([\s\S]*?)\s*\%\}/g,            iterate: /\{\%~\s*(?:\%\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\%\})/g,            varname: '$data',            varoption: '$item',            strip: true,            append: true,            selfcontained: false        },        template: undefined, //fn, compile template        compile: undefined  //fn, for express    }, global;複製代碼 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.