Javascript nodejs-express中的异步操作
我有一条路线Javascript nodejs-express中的异步操作,javascript,node.js,process,Javascript,Node.js,Process,我有一条路线 app.get('/posts',函数(req,res){ res.json([ //资料 ]); //下面的代码会发生什么变化 //假设它正在处理一百万条记录 processMillionRecords(); }); 函数processMillionRecords(){ //处理数百万条记录 } 一旦发送响应,就会调用另一个函数,这是一个相当昂贵的操作。如果这种情况继续下去会发生什么?有什么影响吗 我知道最理想的方法是使用后台进程。所以我用下面的替换了它 res.json([
app.get('/posts',函数(req,res){
res.json([
//资料
]);
//下面的代码会发生什么变化
//假设它正在处理一百万条记录
processMillionRecords();
});
函数processMillionRecords(){
//处理数百万条记录
}
一旦发送响应,就会调用另一个函数,这是一个相当昂贵的操作。如果这种情况继续下去会发生什么?有什么影响吗
我知道最理想的方法是使用后台进程。所以我用下面的替换了它
res.json([
//资料
]);
var child=require('child_process');
child.fork('worker.js');
//worker.js
函数processMillionRecords(){
//处理数百万条记录
}
在哪些情况下,哪一个更受欢迎?节点是为处理长时间异步操作而构建的。除非它非常占用CPU,否则您可能不需要分叉一个新的工作进程。只需将processMillionRecords写入异步,并确保它不会阻止事件循环。在上述情况下(如Timothy所述),会发生以下情况:
- 您的应用程序将快速向用户返回数据
- 节点进程将继续在后台运行异步代码,直到进程完成
- 您的web服务器重新启动--销毁您的后台处理内容
- 您的web服务器正在处理太多的后台任务,无法正确处理传入的用户请求
希望这能有所帮助。如果不使用后台进程,那么派生另一个进程又如何呢?是的,你是对的,也许我应该正确地重新表述这个问题。好的-我认为使用后台进程没有什么错,假设你对开销没有问题(在Node中,你没有很多选择)。如果您真的在做大量的工作,开销并不重要,因为fork只发生一次(每个工作批)。