我有一个接受json请求的应用程序。这些json请求最多可达200k。
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毫秒?
答案 0 :(得分:0)
不,你在假设解析json主体需要591ms时是正确的,但是它并不一定会在这段时间内阻止事件循环。 Express中的中间件(以及引擎盖下的Connect)是有意顺序的,但在大多数情况下它不应该阻止事件循环。 可以阻止事件循环,具体取决于您的编写方式,但是您所拥有的时间只是衡量每个中间件调用时间的长度next()
答案 1 :(得分:0)
不,你不能这么认为。在console
次调用之间大约需要600毫秒,但只有部分调用将由body-parser
解析JSON数据(将阻止事件循环)。尽管如此,解析200K的JSON并不会花费那么多时间。在我的Mac上,解析一个3MB的JSON文件大约需要50ms。
我认为591ms中的大多数实际上将花费读取请求体(非阻塞)。