簡體   English   中英

在流星應用中加載大集合

[英]Loading a Large Collection in a Meteor App

在Meteor應用程序中,包含1000條記錄的大型集合將發布到客戶端。 但是,加載{{loginButtons}會遇到3-5秒的延遲,因為只有在所有大型集合加載后才能完全呈現。

看來{{ loginButtons }}渲染的div #login-buttons是在頁面加載時立即渲染的,但是div #login-dropdown-list需要一些時間才能開始渲染。 #login-dropodown-list模板

該站點正在使用帶有Iron Router的Meteor 0.7.0.1。


更新資料

這是accounts-ui-bootstrap-3下拉菜單的模板代碼,在頁面其余部分呈現之后,需要花費幾秒鍾來加載。 它只是Meteor包中的基本模板,沒什么特別的。

<ul class="nav navbar-nav navbar-right">
    {{ loginButtons }} 
</ul>

我以前認為問題是由於使用Meteor.users集合的下拉菜單,所以這是我的快速渲染路線。

FastRender.onAllRoutes(function(urlPath) {
  this.subscribe(Meteor.users);
  this.subscribe(users);
})

這似乎對解決問題沒有幫助。 我還發現,當下拉菜單仍未呈現時,已經定義了Meteor.userId() 下拉菜單僅在紅色箭頭所指的時間點出現/渲染,這是所有集合已加載的時間點。

此外,由{{ loginButtons }}渲染的div #login-buttons在頁面加載時立即渲染,但是div #login-dropdown-list需要一些時間才能開始渲染。

也許是accounts-ui-bootstrap-3處理渲染的?

在此處輸入圖片說明

您可以在特定路由上使用iron-router的waitonloadingTemplate屬性,以在訂閱准備就緒時向用戶顯示進度指示器。 https://github.com/EventedMind/iron-router#waiting-on-subscriptions-waiton所示

Router.configure({
  layoutTemplate: 'layout',
  notFoundTemplate: 'notFound',
  loadingTemplate: 'loading'
});

Router.map(function () {
  this.route('postShow', {
    path: '/posts/:_id',

    waitOn: function () {
      return Meteor.subscribe('posts');
    }
  });
});

另外, https ://atmosphere.meteor.com/package/fast-render是第三方程序包,可集成到iron-router中並發送初始數據以及模板,因此使頁面看起來立即加載了數據。

http://meteorhacks.com/integrating-iron-router-based-apps-with-fast-render.html上有一個很好的教程。

我看到另外兩個可以幫助您的軟件包:

分頁訂閱: https ://atmosphere.meteor.com/package/paginated-subscription這里的想法是為初始加載設置一個小的限制,當加載其余部分時,更改該限制以加載其余部分

懶惰訂閱: https ://atmosphere.meteor.com/package/lazy-subscription此處的想法不是第一次完全訂閱大型館藏; 只能這樣初始化:

Post = new Meteor.Lazy('post',function(){Meteor.subscribe('posts');});

(它不訂閱任何東西)

然后准備就緒:Template.some_template.get_posts = function(){return Post()。find({}); //請注意,Post現在是一個函數。 }; =>它訂閱

第二種解決方案似乎更直接,但是您可以通過第一種解決方案更好地進行管理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM