Meteor's subscription and sync are slow

前端 未结 5 494
谎友^
谎友^ 2020-11-29 06:39

I have a collection with 10M documents of 6000 stocks, stock name is indexed. When I subscribe to a new stock, meteor hangs more than 10 seconds to get about 3000 documents

5条回答
  •  孤城傲影
    2020-11-29 07:21

    I was struggling with the same issue. In my case I only had to sync ~3000 records, around 30KB total. After weeks of trying I eventually realized that the sync was not the issue, but seemingly the LiveHTML updates that happened while syncing.

    I was able to reduce my page load from 10 seconds for 300 (filtered) records to less than 2 seconds for all 3000 records by disabling template updates during the initial page load. I accomplished that by adding a condition to the function that defined the template content:

    Before (10s page load for 300 records being published by the server):

    Template.itemlist.items = function () {
        return Item.find({type: 'car'},
                         {sort: {start: -1},
                          limit: 30});
    };
    

    To (2s page load for 3000 records published by the server):

    Template.itemlist.items = function () {
        if (Session.get("active")) {    
            return Item.find({type: 'car'},
                             {sort: {start: -1},
                              limit: 30});
        } else {
            return [];
        }
    };
    

    To "activate" the session only once the data was loaded, I added:

    Deps.autorun(function () {
        Meteor.subscribe("Item", 
                         {
                             onReady: function() {
                                 Session.set("active", true);
                             }
                         });
    });
    

提交回复
热议问题