4

我有一个 nodejs 应用程序,其中res.renderexpress 方法以阻塞方式花费大约 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结果是一样的。

4

1 回答 1

4

我认为你真的应该看看https://github.com/caolan/async

直接来自 Async 的仓库:

Async 是一个实用模块,它为使用异步 JavaScript 提供了直接、强大的功能。(...)

Async 提供了大约 20 个函数,包括通常的“功能性”嫌疑人(map、reduce、filter、each…)以及一些常见的异步控制流模式(parallel、series、falling…)。所有这些函数都假定您遵循 node.js 约定,即提供单个回调作为异步函数的最后一个参数。

干杯。

编辑:我不确定以异步方式呈现您的视图是否真的可以帮助您减少时间。您可能希望在客户端实现一个流,以便在数据出现时获取和模板化数据。您可以为此使用Angular之类的前端框架,也可以手动完成。

于 2013-09-24T11:21:02.780 回答