高性能双端js模板---simplite

simplite是一款js实现的模板引擎,它能够完成浏览器端js模版和node服务器端js模板的数据渲染。

  •   渲染性能十分突出。
  •   支持浏览器端和node服务器端模板渲染。
  •   它简单易用,默认采用jsp语法风格来编写逻辑部分的代码,当然,如果你想定制其他标签,也是可以很方便的配置。
  •   它采用原生js语法,没有给使用者带来学习上的成本,当然,采用原生js能够进一步提高渲染的性能。
  •   可以动态导入子模板,当然,子模板可以多层嵌套,同时支持为子模板传入指定的数据集来渲染子模板,非常实用的功能。
  •   可以支持松散的js语法格式,如果你忘记写分号,没关系,模板会帮你处理。
  •   像大部分模板一样,可以设置属性转义输出。
  • 支持对数据的filter处理,可以为模板注入自己的filter。

  下面来看下它和其他流行的模板做的性能对比图:(你也可以自己下载git的代码,运行测试)

编写模板:

 1         <script type="text/html" id="rootTemplate">
 2             <ul>
 3             <%
 4                 for (var i = 0; i < _this.length; i++) {
 5              %>
 6             <%
 7                  var obj = _this[i];
 8              %>
 9              <li><%=obj.name%></li>
10              <%
11                   if (obj.id % 2) {
12                       include(subTemplate, obj);
13                   }
14              %>
15              <%
16                  }
17              %>
18              <ul>
19          </script>

  或者可以把逻辑部分合并

 1         <script type="text/html" id="rootTemplate">
 2             <ul>
 3             <%for(var i=0;i<_this.length;i++){
 4                 var obj = _this[i];
 5             %>
 6             <li><%=obj.name%></li>
 7             <%
 8                 if (obj.id % 2) {
 9                     include(subTemplate, obj);
10                 }
11             }
12             %>
13             <ul>
14         </script>

  子模板:

1         <script type="text/html" id="subTemplate">
2              <li><%=_this.id%>----<%=_this.name%></li>
3         </script>

  填充数据:

 1         var data = [
 2               {
 3                   id: 1,
 4                   name: ‘小学‘
 5               },
 6               {
 7                   id: 2,
 8                   name: ‘中学‘
 9               },
10              {
11                  id: 3,
12                  name: ‘大学‘
13              }
14         ];

  使用方式:

    1:调用静态方法

1          var compile = Simplite.compile;
2          var render = compile(templateStr);
3          var htmlStr = render(data);

    2:实例化方式

 1         var template = new Simplite({
 2             target : ‘insertTemplateNodeId‘,
 3             template : ‘rootTemplate‘
 4         });
 5         template.beforerender = function(data) {
 6             console.log(data)
 7         };
 8         template.afterrender = function(node) {
 9             console.log(node)
10         };
11         template.render(data);

  

  通过上面的代码可见,默认配置下,可以在模板中直接使用“_this”来获取对传入数据的引用,因为咱们传入的是数组,所以可以直接遍历这个数据,来渲染出li元素。在模板中还有对name数据展示和子模板导入的使用介绍,如果name需要转义,可以使用<%=#obj.name%>来指定;例子中,子模板的导入是动态的,根据if的条件来导入,在导入的时候,也指定了子模板使用的数据,这也是这个子模板比较好用的地方,可以只传入父模板中的部分数据到子模板,若没有指定传入的数据,默认是把父模板的数据集传入子模板。从上面的子模板定义的获取属性方式_this.id,可以看到,_this代表的就是父模板传入的数据集。如果你不喜欢默认的模板风格,你也可以定制自己的标签,只要你配置如下几个属性即可:  

1          // 默认逻辑开始标签
2          Simplite.logicOpenTag = ‘<%‘;
3          // 默认逻辑闭合标签
4          Simplite.logicCloseTag = ‘%>‘;
5          // 默认属性开始标签
6          Simplite.attrOpenTag = ‘<%‘;
7          // 默认属性闭合标签
8          Simplite.attrCloseTag = ‘%>‘;

  如果你也不喜欢使用_this来获取当前数据集,那么你也可以定制它: Simplite.dataKey = ‘_this‘;

  渲染出来的效果:

    

  支持对数据的filter处理,首先需要通过调用addFilter进行filter的注册,然后就可以在模板中使用filter(name, data1, data2,...)的处理了,例子如下:

    

1 Simplite.addFilter(‘abc‘, function (name) {
2     return ‘<span style="color: blue;">‘ + name + ‘</span>‘;
3 });

  模板:

<script type="text/html" id="oneArgTemplate">
    <li>
        测试没有传递数据的情况:<% filter(‘abc‘, _this);%>
    </li>
</script>

  效果:

  欢迎访问我的git地址,也欢迎一起为simplite的明天添砖加瓦,如果有什么好的代码可以贡献,本人不甚感激。

  simplite的git地址

时间: 2024-08-11 07:50:05

高性能双端js模板---simplite的相关文章

栈操作之双端顺序栈

数据结构: 栈是允许在同一端进行插入和删除操作的特殊线性表.允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom):栈底固定,而栈顶浮动:栈中元素个数为零时称为空栈.插入一般称为进栈(PUSH),删除则称为退栈(POP).栈也称为后进先出表. 操作系统: 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈 栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放. 双端栈模板代码: #define TRUE 1 #de

各种JS模板引擎对比数据(高性能JavaScript模板引擎)

最近做了JS模板引擎测试,拿各个JS模板引擎在不同浏览器上去运行同一程序,下面是模板引擎测试数据:通过测试artTemplate.juicer与doT引擎模板整体性能要有绝对优势: js模板引擎 JavaScript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注,从而出现在各大型网站 Twitter.淘宝网.新浪浪微博.腾讯QQ空间.腾讯微博等.那么他们各自性能怎么样?请看下面. 通常模板引擎 baiduTemplate(百度)\artTemplate(腾讯)\juicer(淘

关于双端队列 deque 模板 &amp;&amp; 滑动窗口 (自出)

嗯... deque 即为双端队列,是c++语言中STL库中提供的一个东西,其功能比队列更强大,可以从队列的头与尾进行操作... 但是它的操作与队列十分相似,详见代码1: 1 #include <cstdio> 2 #include <iostream> 3 #include <deque> 4 //实际上,引用queue头文件也可以,里面包含了deque头文件 5 6 using namespace std; 7 8 deque<int> dq; //定义

8、泛型程序设计与c++标准模板库2.3双端队列容器

双端队列容器是一种放松了访问权限的队列.除了从队列的首部和尾部访问元素外,标准的双端队列也支持通过使用下标操作符"[]"进行直接访问. 它提供了直接访问和顺序访问方法.其头文件为<deque>. 1)双端队列容器的构造函数 有4中形式的构造函数: deque();//构造size()为0的双端队列容器 deque(size_type n,const T& v=T());//初始化大小为n的双端队列,第二个参数是每个元素的初始值,默认为T()构造的对象 deque(c

js 模板引擎 jade使用语法

Jade是一款高性能简洁易懂的模板引擎,Jade是Haml的Javascript实现,在服务端(NodeJS)及客户端均有支持. 功能 · 客户端支持 · 超强的可读性 · 灵活易用的缩进 · 块扩展 · 代码默认经过编码处理以增强安全性 · 编译及运行时的上下文错误报告 · 命令行编译支持 · HTML5模式(使用!!!5文档类型) · 可选的内存缓存 · 联合动态和静态标记类 · 利用过滤器解析树的处理 · 支持 Express JS · 利用each透明的循环objects,arrays甚

js模板引擎--artTemplate

js模板引擎--artTemplate 以前研究过一段时间的handlebars,但因为其渲染性能略逊于腾讯的artTemplate(在artTemplate的GitHub官网上有推荐的性能测试地址),貌似最近耳边听到得最多的模板引擎也就是artTemplate了,所以就花个时间来研究下吧... artTemplate是新一代的javascript模板引擎,若采用拥有V8引擎的chrome浏览器进行测试,其渲染性能甚至能达到知名模板引擎Mustache的20倍以上以及模板引擎tmpl的40倍以上

Node.js模板引擎的深入探讨

每次当我想用 node.js 来写一个 web 相关项目的时候,我总是会陷入无比的纠结,原因是 JavaScript 生态圈里的模板引擎实在太多了,但那么多却实在找不出一个接近完美的,所谓完美的概念就是功能丰富,书写简单,前后端可共用等一些属性.虽然可以在 Template Chooser 按功能进行挑选,但挑选的结果再用来对比还是各有各的问题.所以干脆就一些模板引擎进行稍微深入的分析,希望通过对比总结出哪种更值得去使用. 第一轮排除 在上次node模板引擎简单比较的文章里,其实已经有个简单的筛

js模板引擎介绍搜集

js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTemplate等),如何从这么多纷繁的模板引擎中选择一款适合自己的呢,笔者最近对主流的js模板引擎(mustache,doT,juicer,artTemplate,baiduTemplate,Handlebars,Underscore)做了一番调研,分享出来希望对大家有用. 从这几个指标来比较js模板

调研js模板引擎

js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTemplate等),如何从这么多纷繁的模板引擎中选择一款适合自己的呢,笔者最近对主流的js模板引擎(mustache,doT,juicer,artTemplate,baiduTemplate,Handlebars,Underscore)做了一番调研,分享出来希望对大家有用. 从这几个指标来比较js模板