我有一个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结果是一样的。
答案 0 :(得分:3)
我认为你应该真正了解https://github.com/caolan/async。
直接来自Async的回购:
Async是一个实用模块,提供直观,强大的功能 用于处理异步JavaScript的函数。 (...)
Async提供大约20种功能,包括通常的“功能” 怀疑(map,reduce,filter,each ...)以及一些常见的模式 用于异步控制流程(并行,系列,瀑布......)。所有 这些函数假设您遵循提供的node.js约定 单个回调作为异步函数的最后一个参数。
干杯。
编辑:我不确定以异步方式呈现视图是否真的可以帮助您减少时间。您可能希望在客户端实现一个流,以便在数据出现时获取和模拟数据。您可以使用Angular之类的前端框架,也可以手动执行。