表达bodyParser阻塞事件循环

时间:2016-05-31 17:20:34

标签: node.js express body-parser

我有一个接受json请求的应用程序。这些json请求最多可达200​​k。

app.use(function (req, res, next) {
    console.time("start2")
    next();
});

app.use(bodyParser.json({ limit: '5mb' }));
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cors());
app.enable('trust proxy');


app.use(function (req, res, next) {
    console.timeEnd("start2")
    next();
});

以及打印到控制台的内容是

start2: 591ms

我是否正确假设解析请求的json主体阻止事件循环591毫秒?

2 个答案:

答案 0 :(得分:0)

不,你在假设解析json主体需要591ms时是正确的,但是它并不一定会在这段时间内阻止事件循环。 Express中的中间件(以及引擎盖下的Connect)是有意顺序的,但在大多数情况下它不应该阻止事件循环。 可以阻止事件循环,具体取决于您的编写方式,但是您所拥有的时间只是衡量每个中间件调用时间的长度next()

答案 1 :(得分:0)

不,你不能这么认为。在console次调用之间大约需要600毫秒,但只有部分调用将由body-parser解析JSON数据(阻止事件循环)。尽管如此,解析200K的JSON并不会花费那么多时间。在我的Mac上,解析一个3MB的JSON文件大约需要50ms。

我认为591ms中的大多数实际上将花费读取请求体(非阻塞)。