上一次用浏览器里面简单的进行了测试,得到的数据是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的一倍还多,swigejs的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. 【搜索】还是N皇后

    先看题才是最重要的: 这道题有点难理解,毕竟Code speaks louder than words,所以先亮代码后说话: #include<iostream> using namesp ...

  2. Number 和 parseInt 区别

    把字符串 转换成 数字的时候, Number 有点不靠谱, 因为会对 '' 和 null 转换成0, parseInt 相对靠谱些; 判断是否是数值时, isNaN 对于字符串'2'的判断是数字, 对 ...

  3. FastReport.Net使用:[33]高亮显示

    1.首先来看下初始报表,很简单很普通. 2.下面对报表改进,90分以上的成绩以绿色显示,60~70分的以橙色斜体显示. 报表设计中选择数据成绩文本框,然后点击工具栏上的“ab突出显示”按钮打开“高亮显 ...

  4. 51Nod1140 矩阵相乘的结果

    随机化算法. A*B==C那么X*A*B==X*C 降到了n*n复杂度. 多次随机X判断即可. By:大奕哥 #include<bits/stdc++.h> using namespace ...

  5. [BZOJ4876][ZJOI2017]线段树

    没有用到任何算法,代码只有60+行,但是细节多如牛毛,各种分类讨论必须全部想清楚才行. https://www.cnblogs.com/xiejiadong/p/6811289.html #inclu ...

  6. 【8.15校内测试】【队列】【manacher】

    dp??不能确定转移状态.考虑用优先队列储存最优决策点,可是发现当前选择最优不能保证最后最优,在后面可以将之前用过的替换过来. 比如数据: 3 5 4 6 只储存a[i]来决策不能延展到后面的状态,因 ...

  7. slf4j使用

    pom jar包引用<!-- Logging --> <dependency> <groupId>ch.qos.logback</groupId> &l ...

  8. WebDriver工作原理

    http://www.cnblogs.com/timsheng/archive/2012/06/12/2546957.html 通过研究selenium-webdriver的源码,笔者发现其实webd ...

  9. oc/object-c/ios用int还是NSInteger

    当需要使用int类型的变量的时候,可以像写C的程序一样,用int,也可以用NSInteger,但更推荐使用NSInteger,因为这样就不用考虑设备是32位的还是64位的. 可以看如下定义:#if _ ...

  10. Delphi CompilerVersion Constant / Compiler Conditional Defines

    http://delphi.wikia.com/wiki/CompilerVersion_Constant The CompilerVersion constant identifies the in ...