【问题标题】:Loading a large collection from MongoDB to Meteor makes pages slow将大型集合从 MongoDB 加载到 Meteor 会使页面变慢
【发布时间】:2016-05-07 00:27:22
【问题描述】:

我是第一次在 Meteor 中开发应用程序。如文档中所示,我以这种方式加载我的收藏:

Items = new Mongo.Collection("items")

items 集合拥有超过一百万个文档,这使得页面加载非常缓慢。我怎样才能避免这种开销?

【问题讨论】:

    标签: mongodb meteor meteor-blaze


    【解决方案1】:

    首先从控制台中删除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');
    

    您的查询和相关字段列表可能因用户类别而异。对于不同的用例,您还可以在同一个集合上拥有多个出版物

    【讨论】:

      【解决方案2】:

      如果您的集合有数百万个文档,那么在任何情况下都将整个数据加载到前端是非常糟糕的。

      你应该明智地使用 PAGINATION,因为在流星中有用于分页的包。但是,如果您想通过 aslagle:reactive-table 使用简单的 Session 变量处理来使用分页(该变量保留客户端和服务器都可以访问的“skip”值)为了更好的展示,你可以观看这个视频https://www.youtube.com/watch?v=UivnTM1YA-I

      实现此功能后,您自己会觉得在 UI 上加载整个数据是不可行的解决方案,并且分页无需页面刷新,异步和响应式地工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-20
        • 1970-01-01
        • 1970-01-01
        • 2018-01-30
        • 1970-01-01
        • 2016-09-12
        • 1970-01-01
        • 2016-11-16
        相关资源
        最近更新 更多