javascript - 一个简单的 Node.JS 基准测试

标签 javascript node.js benchmarking

我正在尝试确定这是否是一个公平的基准。目标是尝试查看 Node.JS 可以处理多少并发连接与各种大小的有效负载。代码如下。

var express = require('express');
var Sequelize = require('sequelize');
var fs = require('fs');
var app = express();


var data;

var filename = process.argv[2] || './start.json';
console.log("Using: " + filename);
data = fs.readFileSync(filename);

var blockSize = 250000;
app.get('/start', function (req, res) {
  // Break up data in blocks.  Works to super high concurrents.
  // for(var i = 0; i < data.length; i+=blockSize)
  //   res.write(data.slice(i, i+blockSize));  

   // Can only handle about 600 concurrent requests if datasize > 500KB
   res.send(data);
});



app.listen(3000, function () {
  console.log('Listing on 3000.');
});

如评论中所述,如果负载大小大于约 500KB 并且有 500 个并发,它将在负载测试客户端获得“对等连接重置”。如果您将数据切片并以 block 的形式写入,它可以在开始之前存活到更高的并发。股票 Node 和 express 都表现出这种行为。

最佳答案

data = fs.readFileSync(filename);

同步方法是 nodejs killer 。它实际上阻塞了 ALL 请求的事件循环,使性能非常糟糕。

试试这个:

var express = require('express');
var Sequelize = require('sequelize');
var fs = require('fs');
var app = express();
var filename = process.argv[2] || './start.json';

var blockSize = 250000;
app.get('/start', function (req, res) {
  // Break up data in blocks.  Works to super high concurrents.
  // for(var i = 0; i < data.length; i+=blockSize)
  //   res.write(data.slice(i, i+blockSize));  

   // Can only handle about 600 concurrent requests if datasize > 500KB
   console.log("Using: " + filename);

   fs.readFile(filename, function (err, data) {
      if (err) throw err;
      res.send(data);
   });

});



app.listen(3000, function () {
  console.log('Listing on 3000.');
});

关于javascript - 一个简单的 Node.JS 基准测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39065857/

相关文章:

javascript - JavaScript 方法的部分应用 : how to retain th meaning of “this”

javascript - 使用单选按钮绘制圆形和正方形不起作用

javascript - 异步 Node.JS 中的用户输入

javascript - 未调用express.js 中的自定义错误处理程序

performance - 在现代 CPU 上进行基准测试时如何考虑节流问题?

javascript - 如何获取当前打开给定网页的用户数量

javascript - 在 jquery 对象列表上同时使用 array.concat() 和 .slice() 时丢失范围

json - 在哪里添加 NPM 依赖项以运行安装后 Hook ?

PHP检查字符串是否为UTF-8的最快方法?

hadoop - MapReduce 作业停止执行