1

4 つのコレクションをサブスクライブするアプリがあります (コレクションはそれぞれ 1 ~ 20 レコードの非常に小さいものです)。しかし、これらのコレクションをロードするのにかかる時間は膨大です。そのうちの 1 つはわずか 13 レコードで、そのテンプレートをロードするのに数秒かかります。それは正常ですか?(私はまだ流星サーバーでテストしています)

これはコードのサンプルです:

Meteor.subscribe('trackedUser', function() {
  console.log('finished fetching trackedUser');
  Template.users.rendered = function() {
   /*handlign of the template*/


    console.log('users template rendered');
  }

  });

    /*observe geolocation after it is all fetched*/
  Meteor.subscribe('geolocation', function() {
    console.log('finished fetching location');
    /* Obseve the Collection geolocation and trigger event when item inserted or removed  */
    query = Geolocation.find({});
    query.observeChanges({
      added: function(id) {
        addMarkerToMap(id);
        window.map.fitBounds(group.getBounds());
        return;
      }
    });
  });
});

そして、これが私のテンプレートです

<template name="users">
<ul id="item-list">  
   {{#each trackedUser}}
    <li id="{{_id}}"> 
        <input type="checkbox" checked /> 
        <span><select name="colorpicker">
                {{#each color}}
                  <option value="{{mColorCode}}" {{selected ../mColor mColorCode}}>{{mColorName}}</option>
                {{/each}}
              </select>
        </span>
        <img width="40"  src="data:image/png;base64,{{mImage}}" />  
        <span class="name">{{mUsername}}</span>
        <p><span class="description">{{mDescription}}</span></p>  
    </li>  
    {{/each}}
</ul>
</template>

ありがとう

4

2 に答える 2

1

この問題は、テンプレート コンテンツの定義に、ページの読み込み中に false となる条件を追加することで解決できました。つまり、最初の同期を実行し、コンテンツが読み込まれたときにのみアクティブ化します。

前 (サーバーによって公開される 300 レコードの 10 秒のページ読み込み):

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

に (サーバーによって公開された 3000 レコードの 2 秒のページ読み込み):

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

データが読み込まれたときにのみセッションを「アクティブ化」するには、次のように追加しました。

Deps.autorun(function () {
    Meteor.subscribe("Item", 
                     {
                         onReady: function() {
                             Session.set("active", true);
                         }
                     });
});
于 2013-10-25T20:41:05.577 に答える