【发布时间】:2016-05-07 00:27:22
【问题描述】:
我是第一次在 Meteor 中开发应用程序。如文档中所示,我以这种方式加载我的收藏:
Items = new Mongo.Collection("items")
items 集合拥有超过一百万个文档,这使得页面加载非常缓慢。我怎样才能避免这种开销?
【问题讨论】:
标签: mongodb meteor meteor-blaze
我是第一次在 Meteor 中开发应用程序。如文档中所示,我以这种方式加载我的收藏:
Items = new Mongo.Collection("items")
items 集合拥有超过一百万个文档,这使得页面加载非常缓慢。我怎样才能避免这种开销?
【问题讨论】:
标签: mongodb meteor meteor-blaze
首先从控制台中删除autopublish 包:
$ meteor remove autopublish
否则所有记录都会发布给所有客户端,1M 记录会很慢。
其次,创建一个过滤集合的发布,以仅发布在当前应用程序上下文中与当前用户实际相关的那些文档:
服务器:
Meteor.publish('myItems',function(){
if ( this.userId ){
return Items.find({ some query relevant to the user },
{fields: { key1: 1, key2: 1, ... only relevant fields }});
}
this.ready();
});
客户:
Meteor.subscribe('myItems');
您的查询和相关字段列表可能因用户类别而异。对于不同的用例,您还可以在同一个集合上拥有多个出版物。
【讨论】:
如果您的集合有数百万个文档,那么在任何情况下都将整个数据加载到前端是非常糟糕的。
你应该明智地使用 PAGINATION,因为在流星中有用于分页的包。但是,如果您想通过 aslagle:reactive-table 使用简单的 Session 变量处理来使用分页(该变量保留客户端和服务器都可以访问的“skip”值)为了更好的展示,你可以观看这个视频https://www.youtube.com/watch?v=UivnTM1YA-I
实现此功能后,您自己会觉得在 UI 上加载整个数据是不可行的解决方案,并且分页无需页面刷新,异步和响应式地工作。
【讨论】: