2013-07-05 100 views
1

我訂閱了4分集的應用程序(收藏是非常小的1到20個記錄每個)。但是加載這些集合所花費的時間是巨大的。 其中之一是隻有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> 

感謝

+0

你有應用程序部署到meteor.com?你會分享網址嗎? –

+1

以我的經驗'subdomain.meteor.com'只是慢。他們可能有1臺服務器託管500個演示網站。當您在本地進行測試時,速度會慢嗎? –

回答

0

我最近不得不診斷性能問題與流星的應用程序,並發現它是不是慢了模板的渲染,而是轉移服務器和瀏覽器之間的數據環。

您可以使用Chrome開發人員工具來診斷問題。

  1. 打開工具,並確保它的網絡流量配置
  2. 裝入網站
  3. 檢查網絡流量。數據是否需要很長時間才能完成到您的瀏覽器?

如果數據花費很長的時間來完成來到你的瀏覽器,那麼你可以更深入地瞭解WebSocket的交通:

  1. 對於WebSocket的流量過濾器(網絡選項卡的底部)
  2. 選擇的WebSocket請求查看幀
  3. 檢查在幀中的信息。這很多嗎?

您可能會發現(正如我所做的那樣),您正在將大量信息傳輸到瀏覽器,而這些信息不需要呈現模板。

在這種情況下,請確保您已禁用autopublish,然後通過使用field specifier發佈您所需的數據。

1

我能夠通過添加一個條件模板的內容是假的,而加載頁面,即做初始同步,只有它被加載時啓動該內容的定義來解決這個問題。

前(300條記錄10秒頁面加載由服務器發佈):

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

(對於3000條記錄由服務器發佈2S頁面加載):

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); 
         } 
        }); 
});