以异步方式执行Express res.render

时间:2013-09-24 09:39:54

标签: javascript node.js asynchronous express pug

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

1 个答案:

答案 0 :(得分:3)

我认为你应该真正了解https://github.com/caolan/async

直接来自Async的回购:

  

Async是一个实用模块,提供直观,强大的功能   用于处理异步JavaScript的函数。 (...)

     

Async提供大约20种功能,包括通常的“功能”   怀疑(map,reduce,filter,each ...)以及一些常见的模式   用于异步控制流程(并行,系列,瀑布......)。所有   这些函数假设您遵循提供的node.js约定   单个回调作为异步函数的最后一个参数。

干杯。

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