CNode

node在响应内容比较大的情况,性能不是很好,有什么方法优化?

Cchosen0ne发布于14 年前最后回复14 年前5 回复6130 浏览0 收藏

代码:

  var http = require('http');
  var str = ' .... '; // 300k大小的字符串
  http.Server(function(req, res){
        res.end(str);
  }).listen(8080);

就是很简单的输出300k左右的字符串,同时和nginx做对比。 用ab测试,在并发数在100, 200, 1000, 2000, 10000的情况下,请求10000次:

node 开启4个worker,设置maxSockets为4000 nginx同样开启4个worker,worker_connection为40000

按理说nginx读取静态文件会有磁盘io,但是结果却明显好于node,这是为什么呢?有什么优化的手段呢?

查看回复

回复 (5)

R
rabby#1·14 年前

相同的文件读取会被缓存下来,io效率提高很多。我估计nginx和ubuntu都会缓存读取的那个文件。

T
therabbit#2·14 年前
var http = require('http');
var str = ' .... '; // 300k大小的字符串
var buffer = Buffer(str);
http.Server(function(req, res){
      res.end(buffer);
}).listen(8080);

先将字符串转换成缓冲器,再输出缓冲器,这样会不会更快? 我只是刚接触NodeJS,上面的方法也只是我瞎猜的

D
DoubleSpout#3·14 年前

常用的放在buffer里吧

C
chosen0ne#4·14 年前

的确,换成buffer后,性能会大增。 这是用buffer后的数据: nodejs buffer: 100 | 200 | 500 | 1000 | 2000 | 5000 | 10000 2865 |2849 | 2901 | 2803| 2709 |2149 |3194

为什么buffer的性能会好于string呢?

T
therabbit#5·14 年前
引用 chosen0ne的确,换成buffer后,性能会大增。 这是用buffer后的数据:<br nodejs buffer:<br 100 | 200 | 500 | 1000 | 2000 | 5000 | 1...

估计是因为要进行编码转换吧,在Javascript里面,字符串貌似都是以Unicode存储的,然后在发送出去之前,要对字符串进行编码转换,但如果发送的是Buffer的话,就不需要进行转换了 在这里看到的http://docs.cnodejs.net/cman/buffers.html

参与回复
登录后即可参与回复。登录