我有一个快速应用程序,其中一个功能是“移动”文件。例如,您可以将文件夹拖到另一个文件夹并移动它的内容。移动完所有内容后,服务器会相应地做出响应。
我发现,当使用包含许多文件(可能是其他文件夹)的文件夹执行此操作时,这可能导致事件循环被阻止最多3秒以上,我发现使用{{3 }}
有人会对我如何防止这种情况有任何建议吗?我可以选择使用child_process.fork
,但我不确定这将如何与http路由绑定,但我会测试它。有没有其他方法来改善这样的事情?
代码示例:这是我现在正在测试的一部分,主要是从Mongo中的物化路径模式构建“树”:
var items = []
Items.find({parentId: null, user_id: '123', type: 'directory'})
.exec(function(err, docs) {
if (err) return res.send(err);
async.each(docs, function(doc, cb) {
doc.getArrayTree({
condition: {type: 'directory'}
}, function(err, childDocs) {
if (_.isEmpty(childDocs)) return cb();
items.push(childDocs[0]);
cb();
});
}, function(err) {
if (err) return res.send(err);
res.send(items);
});
});
这是使用mongoose实现的,具体而言我认为问题/延迟是blocked。每个退回的项目都会被调用。必须有一种更有效的方式,也许有一个聚合。这显示大约+ -500ms的延迟,当然这会因为有更多的文档而降低。