我的Meteor应用程序中有一个MongoDB集合Foods
,大约有8000个条目,每个条目有近1000个字段。
出于某种原因,由于我包含它,从客户端调用服务器方法的响应时间非常慢(秒)。为了调试,我一直在逐一删除。现在,我没有在任何涉及的函数中使用该集合(我甚至用console.log替换了服务器方法),但是如果我将行import { Foods } from '../imports/collections.js';
添加到服务器,则响应很慢,如果我不这样做很快。
有没有人知道为什么会这样?
答案 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,但它可以正常工作并且非常方便。
但是,请记住autopublish
是not secure,并且永远不应出现在预计将部署在服务器上的版本中。
答案 1 :(得分:0)
所以答案很简单。
如Meteor docs中所说,
默认情况下,Meteor会自动将集合中的每个文档发布到每个连接的客户端。要关闭此行为,请删除autopublish包
因此,只需导入集合,Meteor会解释您要将其全部发布,这就是使它变慢的原因,即使我没有明确地使用它。