js 模板引擎 為什么選擇 dot


我的上篇博文詳細介紹了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;

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM