Top

性能卓越的js模板引擎--artTemplate

artTemplate能够将数据与View视图的分离,充分利用 javascript 引擎特性,使得其性能无论在前端还是后端都有极其出色的表现。

在 chrome 下渲染效率测试中分别是知名引擎 Mustache 与 micro tmpl 的 25 、 32 倍。

一、简洁编写模板

1.(采用script标签并带有属性id和type="text/html")

 1 <script id="test" type="text/html">
 2    {{if isAdmin}}
 3    
 4    <h1>{{author}}</h1>
 5    <ul>
 6     {{each list as value i}}
 7     <li>{{i+1}}:{{value}}</li>
 8     {{/each}}
 9    </ul>
10    
11    {{/if}}
12  </script>

 2.出色的渲染模板

      template(id, data) 根据 id 渲染模板。内部会根据document.getElementById(id)查找模板,如果没有 data 参数,那么将返回一渲染函数。

var data = {
    author: '宫崎骏',
    isAdmin: true,
    list: ['千与千寻', '哈尔的移动城堡', '幽灵公主', '风之谷', '龙猫']
};
var html = template('test', data);
document.getElementById('content').innerHTML = html;

3.template.compile([id], source)将返回一个渲染函数。其中 id 参数是可选的,如果使用了 id 参数,可以使用template.render(id, data)渲染模板。

 1  var source =
 2       '<ul>'
 3     + '<% for (var i = 0; i < list.length; i ++) { %>'
 4     +        '<li>索引 <%= i + 1 %> :<%= list[i] %></li>'
 5     +  '<% } %>'
 6     + '</ul>';
 7     
 8     var data = {
 9         list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']
10     };
11     
12     var render = template.compile(source);
13     var html = render(data);
14     document.getElementById('content').innerHTML = html;

二、简洁的模板语法

 1.简洁语法(采用"{{ }}",推荐使用)

{{each resultList as result index}}
   <tr data-id = "{{result.userId}}">
      <td>{{index}}</td>
      <td>{{if result.userType == 0 }}普通用户{{else}}管理员{{/if}}</td>
      <td>{{result.userName}}</td>
      <td>{{if result.status == 0 }}停用{{else}}启用{{/if}}</td>
   </tr>
{{/each}}

 2.原生语法(采用"<%= %>") 类似于JSP语法写法

<script id="test" type="text/html">
<%if {%>
  <%include('admin_content')%>

  <%for (var i=0;i<list.length;i++) {%>
    <div><%=i%>.<%=list[i].user%></div>
  <%}%>
<%}%>
</script>

3.template.helper(name, callback) 将返回一个渲染结果。

1 {{each collectionList as item index}}             
2     <p><span name="startTime">{{item.startTime | dateFormat: 'yyyy-MM-dd'}}</span>
3 {{/each}}
 1 template.helper("dateFormat", function(date, fmt) {
 2     if (!date) return '';
 3 
 4     date = date.split('-').join('/');
 5     date = new Date(date);
 6     var o = {
 7         "M+": date.getMonth() + 1, //月份   
 8         "d+": date.getDate(), //
 9         "h+": date.getHours(), //小时   
10         "m+": date.getMinutes(), //
11         "s+": date.getSeconds(), //
12         "q+": Math.floor((date.getMonth() + 3) / 3), //季度   
13         "S": date.getMilliseconds() //毫秒   
14     };
15     if (/(y+)/.test(fmt))
16         fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
17     for (var k in o)
18         if (new RegExp("(" + k + ")").test(fmt)) {
19             fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
20         }
21     return fmt;
22 });

资料参考

https://aui.github.io/art-template/zh-cn/index.html

https://cdc.tencent.com/2012/06/15/ 

posted @ 2016-08-25 17:41  Avenstar  阅读(272)  评论(0)    收藏  举报