注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

snoopyxdy的博客

https://github.com/DoubleSpout

 
 
 

日志

 
 

高性能,轻量级nodejs静态文件ifile模块发布  

2013-06-20 22:51:34|  分类: node |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
之前写了篇博客作为ifile模块的前瞻,终于经过几个晚上的奋斗,ifile模块发布了,ifile模块是nodejs的http/https静态文件模块,主要解决了nodejs对静态文件疲软的支持,模块主要采用libuv的多线程异步编写而成.
整个项目跨平台支持,win8,linux,mac 10.8 均测试通过
安装方法:
npm install ifile
代码示例:

var ifile = require('ifile')
var http = require('http')
ifile.add([
 ["/static",__dirname,['js','css','jpg']],
],function(req,res,is_static){
    res.statusCode = 404;
    res.end('404')
})
var http = require('http');
http.createServer(function (req, res) {
  ifile.route(req,res);
}).listen(8124);

下面一张图片用来说明ifile模块和传统nodejs的静态模块的确别和优势:
高性能,轻量级nodejs静态文件ifile模块发布 - snoopyxdy - snoopyxdy的博客
ifile模块解决了nodejs单一主线程所造成的频繁线程切换的性能损耗,ifile模块所有计算,添加响应头,读取文件,gzip压缩等都是在libuv的工作线程中执行的,所以主线程能够尽可能多的接受用户的请求,增加系统的吞吐量。

下面是一组ifile模块和expressjs框架的静态文件压力测试数据报告,测试机器和网络都相同,test.js为同一个文件,大小是6KB,我们看下测试结果:
首先是expressjs

express
ab -c 100 -n 20000 http://192.168.28.5:8126/js/test.js
Requests per second:    915.21 [#/sec] (mean)

ab -c 500 -n 20000 http://192.168.28.5:8126/js/test.js
Requests per second:    858.89 [#/sec] (mean)

ab -c 800 -n 20000 http://192.168.28.5:8126/js/test.js
Requests per second:    668.99 [#/sec] (mean)

ab -c 500 -n 20000 -H "Accept-Encoding: gzip" http://192.168.28.5:8126/js/test.js
Requests per second:    677.11 [#/sec] (mean)

然后是ifile

ifile
ab -c 100 -n 20000 http://192.168.28.5:8125/js/test.js
Requests per second: 2077.29 [#/sec] (mean)

ab -c 500 -n 20000 http://192.168.28.5:8125/js/test.js
Requests per second: 1880.00 [#/sec] (mean)

ab -c 800 -n 20000 http://192.168.28.5:8125/js/test.js
Requests per second: 1791.16 [#/sec] (mean)

ab -c 500 -n 20000 -H "Accept-Encoding: gzip" http://192.168.28.5:8125/js/test.js
Requests per second: 1858.01 [#/sec] (mean)

在性能上ifile模块比express要高出1倍还不止,有的甚至将近3倍,当然express框架还有其他的一些损耗,比如添加req和res的原形链等等,于是我将express的静态文件功能交由ifile模块来执行,看下测试结果:

express+ifile
ab -c 100 -n 20000 http://192.168.28.5:8127/js/test.js
Requests per second:    1684.85 [#/sec] (mean)

ab -c 500 -n 20000 http://192.168.28.5:8127/js/test.js
Requests per second:    1717.32 [#/sec] (mean)

ab -c 800 -n 20000 http://192.168.28.5:8127/js/test.js
Requests per second:    1399.09 [#/sec] (mean)

ab -c 500 -n 20000 -H "Accept-Encoding: gzip" http://192.168.28.5:8127/js/test.js
Requests per second:    1468.06 [#/sec] (mean)

性能虽较单独使用ifile模块由所下降,但是比expressjs自带的静态文件输出性能提升1倍。
最后我们再看下老牌web服务器nginx的性能把:

nginx
ab -c 100 -n 20000 http://192.168.28.5:8124/js/test.js
Requests per second: 2634.31 [#/sec] (mean)

ab -c 500 -n 20000 http://192.168.28.5:8124/js/test.js
Requests per second: 2086.92 [#/sec] (mean)

ab -c 800 -n 20000 http://192.168.28.5:8124/js/test.js
Requests per second: 2033.45 [#/sec] (mean)

ab -c 500 -n 20000 -H "Accept-Encoding: gzip" http://192.168.28.5:8124/js/test.js
Requests per second: 2029.59 [#/sec] (mean)


性能相当强悍,比ifile模块还要高一个数量级,看来我写ifile想超越nginx的静态文件性能的愿望是破灭了。
附上ifile整合入expressjs框架的代码:

var express = require('express');
var app = express();

var ifile = require("ifile");

app.use(ifile.connect()); //default is [['/static',__dirname]];

app.listen(3000);

最后欢迎广大爱好者下载试用,有任何问题欢迎留言.




  评论这张
 
阅读(2094)| 评论(10)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016