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

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

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

编写模板:

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

  或者可以把逻辑部分合并

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

  子模板:

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

  填充数据:

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

  使用方式:

    1:调用静态方法

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

    2:实例化方式

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

  

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

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

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

  渲染出来的效果:

    

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

    

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

  模板:

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

  效果:

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

  simplite的git地址

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

  1. 高性能双端js模板

    高性能双端js模板(新增filter)---simplite simplite是一款js实现的模板引擎,它能够完成浏览器端js模版和node服务器端js模板的数据渲染. 渲染性能十分突出. 支持浏览器 ...

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

    最近做了JS模板引擎测试,拿各个JS模板引擎在不同浏览器上去运行同一程序,下面是模板引擎测试数据:通过测试artTemplate.juicer与doT引擎模板整体性能要有绝对优势: js模板引擎 Ja ...

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

    嗯... deque 即为双端队列,是c++语言中STL库中提供的一个东西,其功能比队列更强大,可以从队列的头与尾进行操作... 但是它的操作与队列十分相似,详见代码1: 1 #include < ...

  4. SPOJ - ADALIST,双端队列入门模板!

    ADALIST - Ada and List 这道题时限6.5s,激动人心啊,好多人STL一顿乱写AC,哈哈,如果熟悉双端队列的话这道题其实是很水的. 题意:n个数的数列,然后接下来Q次操作,每次可以 ...

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

    双端队列容器是一种放松了访问权限的队列.除了从队列的首部和尾部访问元素外,标准的双端队列也支持通过使用下标操作符"[]"进行直接访问. 它提供了直接访问和顺序访问方法.其头文件为& ...

  6. js 模板引擎 jade使用语法

    Jade是一款高性能简洁易懂的模板引擎,Jade是Haml的Javascript实现,在服务端(NodeJS)及客户端均有支持. 功能 · 客户端支持 · 超强的可读性 · 灵活易用的缩进 · 块扩展 ...

  7. 从壹开始前后端分离 [ vue + .netcore 补充教程 ] 二九║ Nuxt实战:异步实现数据双端渲染

    回顾 哈喽大家好!又是元气满满的周~~~二哈哈,不知道大家中秋节过的如何,马上又是国庆节了,博主我将通过三天的时间,给大家把项目二的数据添上(这里强调下,填充数据不是最重要的,最重要的是要配合着让大家 ...

  8. doT js 模板引擎【初探】要优雅不要污

    js中拼接html,总是感觉不够优雅,本着要优雅不要污,决定尝试js模板引擎. JavaScript 模板引擎 JavaScript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注. ...

  9. 双端队列(单调队列)poj2823 区间最小值(RMQ也可以)

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 41844   Accepted: 12384 ...

随机推荐

  1. Golang+Mongodb

    Golang+Mongodb打造你的第一个站点 很多人推荐MEAN来开发站点.MEAN就是M:mongodb,E:expressjs.A:angular最后的N:nodejs. 但是如果你亲身的体会到 ...

  2. JTextArea Demo

    在往JTextArea中填充数据时,JTextArea上的滚动条也可以拖动.解决办法:主线程放在EDT中,fill JTextArea的操作放在另外一个线程中,这样fill操作与GUI上的操作就分离了 ...

  3. Java拾遗(一):浅析Java子类和父类的实例化顺序 及 陷阱

    本文主要介绍Java里经常使用的子类和父类的变量实例化顺序及陷阱,并结合一个Android实例来探讨此问题.日后编程中应尽量避免此陷阱. 首先看以下一段代码: 定义一个虚类Server.java pa ...

  4. HihoCoder——Trie树

    本文出自:http://blog.csdn.net/svitter 原题:http://hihocoder.com/contest/hiho2/problem/1 题解:使用Trie树..基础题目.一 ...

  5. 吐槽一下Activiti用户手册和一本书

    业余没事的时候,读点Java轮廓,无意中发现Activiti.我们打算跑了几个例子来看看它是如何. 我们一直从事低层次.我们在上面的照顾偶尔有精确地的程度不是什么. 这个过程是如此悲惨开始.第一Act ...

  6. rails 4.0.2 + mongoid 对mongodb进行增删改查

    新建项目 rails new mongoid_app --skip-active-record --skip-test-unit --skip-bundle create create README. ...

  7. spring mvc中实现csrf安全防御简记

    1.csrf是什么 csrf全称是Cross-site request forgery,http://en.wikipedia.org/wiki/Csrf 危害:使受害用户在不经意间执行了不是用户意愿 ...

  8. socket示例代码演示程序(螺纹)

    client码,如以下: import java.io.*; import java.net.*; public class DailyAdviceClient { public void go(){ ...

  9. Spring【AOP】

    AOP是OOP的延续,是软件开发中的一个热点. AOP技术,是OOP补充. OOP引入封装.继承和多态建立一种对象层次结构模拟公共行为集合,而对从左到右的关系则显得无能为力.对于AOP则恰恰适应这样的 ...

  10. Android使用HttpClient方法和易错问题

    HttpClient为Android开发人员提供了跟简洁的操作Http网络连接的方法,在连接过程中也有两种方式,get和post,先看一下怎样实现的 默认是get方式 //先将參数放入List,再对參 ...