Node.js事件循环被阻止来自快速路由

时间:2015-08-02 04:49:40

标签: javascript node.js

我有一个快速应用程序,其中一个功能是“移动”文件。例如,您可以将文件夹拖到另一个文件夹并移动它的内容。移动完所有内容后,服务器会相应地做出响应。

我发现,当使用包含许多文件(可能是其他文件夹)的文件夹执行此操作时,这可能导致事件循环被阻止最多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的延迟,当然这会因为有更多的文档而降低。

0 个答案:

没有答案