【发布时间】:2013-09-29 10:56:27
【问题描述】:
我有一个 nodejs 应用程序,其中res.render 的 express 方法以阻塞方式花费了大约 400 毫秒。我如何处理这个以非阻塞方式执行?我的 apache 基准测试需要 12 秒来执行大约 30 个并发请求。如何以更好的方式实现这一点?
var start = +new Date;
//fetch data from redis
console.log('time taken to fetch data from redis ' + (+new Date - start)); //30 ms
res.render('some_jade_view', params);
console.log('time taken to render data ' + (+new Date - start)); //530 ms
我尝试了process.nextTick,但没有太大帮助,ab 结果是一样的。
【问题讨论】:
-
给我们看一些代码。尤其是带有 .render 调用的部分。
-
@Krasimir 添加了代码,但这并没有多大帮助,因为玉视图需要 500 毫秒的时间来渲染。现在,我注意到它本质上是阻塞的。
res是传递给快速路由的响应对象。 -
玉观是不是极其复杂?您是否添加了任何可能会延迟渲染的中间件?
-
@WiredPrairie 没那么复杂,它只是创建了大约 200 KB 的 HTML ;) 好吧,问题仍然是使
res.render非阻塞,这样即使它很复杂,它适用于 30 个同时连接。 -
也许这个:stackoverflow.com/questions/16280917/…。没有什么开关可以进行需要顺序异步渲染的长时间阻塞调用。
标签: javascript node.js asynchronous express pug