上一次用浏览器里面简单的进行了测试,得到的数据是swig是ejs的速度的一倍左右,这次在控制台进行测试,能够得到比较精确的数据,并加入了dot一块儿进行测试。

测试数据是一百万条记录

创建测试数据createdata.js:

var testData = {
title:'测试标题',
description: '<p>这是一个描述,里面用很多标签,有<h1>h1标签</h1><h2>h2标签</h2><h3>h3标签</h3><h4>h4标签</h4><h5>h5标签</h5><p>但是不会解析',
datas : createData()
};
function createData(){
var array = new Array();
for(var i = 0; i < 1000000; i++){
array[i] = {name: "我是data" + i, age: i, comp: '一个大公司'};
}
return array;
} module.exports = testData;

测试文件run.js:

var swig = require('swig');
var ejs = require('ejs');
var doT = require('dot'); var testdata = require('./createdata'); var templateString = null;
var fs = require('fs'); var templateSwig = '标题:{{title}} 描述:{{description}} 列表:<ul>{% for item in datas -%} <li>姓名:{{item.name}} 年龄:{{item.age}} 公司:{{item.comp}}</li>{%- endfor%}</ul>'; var templateEjs = '标题:<%= title %> 描述:<%= description %> 列表:<ul><% datas.forEach(function(item) { %><li>姓名:<%= item.name %> 年龄:<%= item.age %> 公司:<%= item.comp %></li><% }); %></ul>'; var templateDoT = '标题:{{= it.title}} 描述:{{= it.description}} 列表:<ul>{{for(var item in it.datas) { }}<li>姓名:{{=item.name}} 年龄:{{=item.age}} 公司:{{=item.comp}}</li>{{ } }}</ul>' console.log("--------------开始测试--------------\n\n");
console.log("--------------正在测试SWIG--------------");
var star = new Date().getTime();
console.log("开始时间:",star); swig.render(templateSwig, {locals:testdata} ); var end = new Date().getTime(); console.log("结束时间:",end);
console.log("%d条数据SWIG用时%\d毫秒\n",testdata.datas.length,end - star); console.log("--------------正在测试EJS--------------");
star = new Date().getTime();
console.log("开始时间:",star);
ejs.render(templateEjs, testdata); end = new Date().getTime(); console.log("结束时间:",end);
console.log("%d条数据EJS用时%\d毫秒\n",testdata.datas.length,end - star); console.log("--------------正在测试DOT--------------");
star = new Date().getTime();
console.log("开始时间:",star); doT.template(templateDoT)(testdata); end = new Date().getTime();
console.log("结束时间:",end);
console.log("%d条数据DOT用时%\d毫秒",testdata.datas.length,end - star);

一百万条数据时测试的结果如下:

--------------正在测试SWIG--------------

开始时间: 1421387088710

结束时间: 1421387097640

1000000条数据SWIG用时8930毫秒

--------------正在测试EJS--------------

开始时间: 1421387097645

结束时间: 1421387126751

1000000条数据EJS用时29106毫秒

--------------正在测试DOT--------------

开始时间: 1421387126754

结束时间: 1421387130656

1000000条数据DOT用时3902毫秒

测试结果显示:doT最快,是swig的一倍还多,swig是ejs的3倍多

十万条数据时测试结果如下:

--------------正在测试SWIG--------------

开始时间: 1421389083284

结束时间: 1421389084332

100000条数据SWIG用时1048毫秒

--------------正在测试EJS--------------

开始时间: 1421389084335

结束时间: 1421389087374

100000条数据EJS用时3039毫秒

--------------正在测试DOT--------------

开始时间: 1421389087377

结束时间: 1421389087890

100000条数据DOT用时513毫秒

一万条数据时测试结果如下:

--------------正在测试SWIG--------------

开始时间: 1421389209634

结束时间: 1421389210048

10000条数据SWIG用时414毫秒

--------------正在测试EJS--------------

开始时间: 1421389210054

结束时间: 1421389210387

10000条数据EJS用时333毫秒

--------------正在测试DOT--------------

开始时间: 1421389210392

结束时间: 1421389210417

10000条数据DOT用时25毫秒

可见在一万条数据的时候EJS居然比SWIG快了,不过还是DOT一马当先。

模板选择不光要考虑速度,还有考虑学习成本,使用习惯,团队合作等多种因素。对速度有所了解好,下一次开始考虑项目中要选择哪个模板引擎。

原文地址:ejs和swig对比问题之二

ejs和swig对比问题之二的更多相关文章

  1. ejs和swig对比的问题之一

    本来想测试下两者在nodejs中得执行速度,设置了一个测试数据,如下 var testData = { title:'测试标题', description: '<p>这是一个描述,里面用很 ...

  2. Apache 流框架 Flink,Spark Streaming,Storm对比分析(二)

    本文由  网易云发布. 本文内容接上一篇Apache 流框架 Flink,Spark Streaming,Storm对比分析(一) 2.Spark Streaming架构及特性分析 2.1 基本架构 ...

  3. 电子助视仪 对比增强算法 二十种色彩模式(Electronic Video Magnifier, 20 color mode)

    电子助视仪 是一种将原始彩色图像转换为某种对比度高的图像,例如将原始图像变换为黑底白字,红底白字,白底红字,蓝底黄字,黄字蓝底等等.电子助视仪的主要应用场景为为老人或者特殊弱视人群的阅读.国内国外均有 ...

  4. python与php生成二维码对比

    php生成二维码 include 引入的库单独下载 <?php header("Content-type:text/html;charset=utf-8"); error_r ...

  5. background-image 与 img 动画性能对比

    开发H5常常会用到滑屏,目前大部分滑屏插件都是通过控制页面的transform属性来实现.尽管如此,我总是发现自己的H5滑动起来就是不如网上一些优秀案例流畅,表现为滑动动画会出现卡顿.跳帧. 后来我发 ...

  6. python下实现二叉堆以及堆排序

    python下实现二叉堆以及堆排序 堆是一种特殊的树形结构, 堆中的数据存储满足一定的堆序.堆排序是一种选择排序, 其算法复杂度, 时间复杂度相对于其他的排序算法都有很大的优势. 堆分为大头堆和小头堆 ...

  7. Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)

    本文由  网易云发布. 1.Flink架构及特性分析 Flink是个相当早的项目,开始于2008年,但只在最近才得到注意.Flink是原生的流处理系统,提供high level的API.Flink也提 ...

  8. List集合去重方式及效率对比

    List集合相信大家在开发过程中几乎都会用到.有时候难免会遇到集合里的数据是重复的,需要进行去除.然而,去重方式有好几种方式,你用的是哪种方式呢?去重方式效率是否是最高效.最优的呢?今天就给大家讲解一 ...

  9. 第8.17节 Python __repr__方法和__str__方法、内置函数repr和str的异同点对比剖析

    一. 引言 记得刚开始学习Python学习字符串相关内容的时候,查了很多资料,也做了些测试,对repr和str这两个函数的返回值老猿一直没有真正理解,因为测试发现这两个函数基本上输出时一样的.到现在老 ...

随机推荐

  1. Host aggregate分区

    问题描述:生产区一期环境增加4台计算结点,希望被大数据租户独占1. 该大数据用户创建的虚拟机必须被调度到这4个计算结点2. 其他租户创建虚拟机禁止调度到这4台机器 标黄的需要自行根据情况修改解决方案: ...

  2. 【UOJ #110】【APIO 2015】Bali Sculptures

    http://uoj.ac/problem/110 这道题subtask4和subtask5是不同的算法. 主要思想都是从高位到低位贪心确定答案. 对于subtask4,n比较小,设\(f(i,j)\ ...

  3. [BZOJ4196][NOI2015]软件包管理器(树链剖分)

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2166  Solved: 1253[Submit][Sta ...

  4. bzoj 2733: [HNOI2012]永无乡 -- 线段树

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MB Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自 ...

  5. asp.net mvc中DropDownList

    asp.net mvc中DropDownList的使用. 下拉列表框 以分为两个部分组成:下拉列表和默认选项 DropDownList扩展方法的各个重载版本基本上都会传递到这个方法上:   publi ...

  6. Linux下简单分析请求有没有进到本机的工具tcpdump(网络接口的数据包的头信息)

    可以通过这个工具快速分析出一个请求到底有没有进入到本机.信息有点简单,对于前期的分析比较有帮助.而对于详细的分析可以借助iptables的raw表进行日志分析. 参考: http://man.linu ...

  7. STM32 Hardware Development

    http://www.st.com/web/en/resource/technical/document/application_note/CD00164185.pdf AN2586 http://w ...

  8. Spring+JDBC实例

    1. Customer 表 在这个例子中,我们使用的是MySQL数据库. CREATE TABLE `customer` ( `CUST_ID` int(10) unsigned NOT NULL A ...

  9. NUMA架构

    参考: http://www.ibm.com/developerworks/cn/linux/l-numa/ http://blog.sina.com.cn/s/blog_3f5c2f8c01000b ...

  10. zookeeper选举机制

    在上一篇文章中我们大致浏览了zookeeper的启动过程,并且提到在Zookeeper的启动过程中leader选举是非常重要而且最复杂的一个环节.那么什么是leader选举呢?zookeeper为什么 ...