导入集合时,流星服务器响应速度慢

时间:2017-12-04 10:58:35

标签: meteor

我的Meteor应用程序中有一个MongoDB集合Foods,大约有8000个条目,每个条目有近1000个字段。

出于某种原因,由于我包含它,从客户端调用服务器方法的响应时间非常慢(秒)。为了调试,我一直在逐一删除。现在,我没有在任何涉及的函数中使用该集合(我甚至用console.log替换了服务器方法),但是如果我将行import { Foods } from '../imports/collections.js';添加到服务器,则响应很慢,如果我不这样做很快。

有没有人知道为什么会这样?

2 个答案:

答案 0 :(得分:3)

注意: OP已经满意地回答了他的问题。但是,应该指出以下信息,特别是对于那些在控制Meteor的自动发布行为方面遇到类似问题的人。

只要您的包列表中存在自动发布,每个集合会立即发布到客户端,即会创建Mongo.Collection

请参阅Mongo.Collection constructor的此代码。

然后触发自动发布,即使只是导入包含要调用的Mongo.Collection构造函数的文件(这很可能是你的情况)。

但是,如果您只希望这一个集合阻止自动发布,则无需删除autopublish包。

您的Mongo.Collection构造函数接受带有选项的对象作为第二个参数。要阻止仅针对此集合的自动发布(在autopublish处于活动状态时),您可以添加以下选项:

{
    _preventAutopublish: true,
    // ... other options if desired
}

您给定的Foods系列的示例可能是

export const Foods = new Mongo.Collection('foods', {_preventAutopublish: true});

虽然选项为is not documented,但它可以正常工作并且非常方便。

但是,请记住autopublishnot secure,并且永远不应出现在预计将部署在服务器上的版本中。

答案 1 :(得分:0)

所以答案很简单。

Meteor docs中所说,

  

默认情况下,Meteor会自动将集合中的每个文档发布到每个连接的客户端。要关闭此行为,请删除autopublish包

因此,只需导入集合,Meteor会解释您要将其全部发布,这就是使它变慢的原因,即使我没有明确地使用它。