上一次用浏览器里面简单的进行了测试,得到的数据是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. 【JAVAWEB学习笔记】26_Linux基础:简介安装、常用命令和JDK、Mysql、Tomcat的安装

    Linux基础 学习目标 1.了解Linux的简介与安装 2.掌握Linux常用的命令 3.掌握Linux系统上JDK.Mysql.Tomcat的安装 一.Linux的简介 1.Linux的概述 Li ...

  2. 【Leetcode】583. Delete Operation for Two Strings

    583. Delete Operation for Two Strings Given two words word1 and word2, find the minimum number of st ...

  3. Cable master POJ - 1064

    Inhabitants of the Wonderland have decided to hold a regional programming contest. The Judging Commi ...

  4. pm2常用的命令

    exit //退出 ssh www@25.17.1.54 // 远程登录主机sudo su // 获得 root 权限 并且进入目录 /home/wwwpm2 list // 查看当前的列表 id 和 ...

  5. luogu 11月月赛 斐波那契数列

    本来想作为水题刷,很快就想出了做法,结果细节实现太差改了好久... 根据题意你会发现其实就是求方程 ax+by=k解的个数. 此时 a=f[i],b=f[i+1],而(x,y)就是你要求的数对. 于是 ...

  6. 【DFS】BZOJ3522-[Poi2014]Hotel

    [题目大意] 给出一棵树,求三个节点使得它们两两之间的距离相等,问共有多少种可能性? [思路] 显然,这三个节点是关于一个中心点对称地辐射出去的. 枚举中心点,往它的各个子树跑Dfs.tmp[i]表示 ...

  7. 关于iis6.0远程溢出漏洞

    漏洞描述 漏洞编号:CVE-2017-7269 发现人员:Zhiniang Peng和Chen Wu(华南理工大学信息安全实验室,计算机科学与工程学院) 漏洞简述:开启WebDAV服务的IIS 6.0 ...

  8. dubbo基础(初学习dubbo)

    1. 扩展   Soap是webService协议.是http+xml. Rest ful是http+json.相对于soap来说rest ful就是轻量的,因为==.   Rpc与soa区别? Rp ...

  9. 【洛谷】P1052 过河【DP+路径压缩】

    P1052 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙 ...

  10. HDU 5645 DZY Loves Balls 水题

    DZY Loves Balls 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5645 Description DZY loves playing b ...