ejs和swig对比问题之二

上一次用浏览器里面简单的进行了测试,得到的数据是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对比问题之二

posted @ 2015-01-16 15:22  MNight  阅读(817)  评论(0编辑  收藏  举报