流星收集太慢了

时间:2013-07-05 11:30:43

标签: collections meteor

我有一个订阅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>

由于

2 个答案:

答案 0 :(得分:1)

我能够通过在加载页面时为模板内容的定义添加一个条件来解决这个问题,即在进行初始同步时,只在加载时激活该内容。

之前(服务器发布的300条记录加载10页):

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

To(服务器发布的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);
                         }
                     });
});

答案 1 :(得分:0)

我最近不得不使用流星应用程序诊断性能问题,发现模板的渲染速度不是很慢,而是在服务器和浏览器之间传输数据。

您可以使用Chrome开发者工具来诊断问题。

  1. 打开该工具并确保其分析网络流量
  2. 加载您的网站
  3. 检查网络流量。是否需要很长时间才能将数据完成到您的浏览器中?
  4. 如果数据需要很长时间才能完成,那么您可以深入了解websocket流量:

    1. 过滤websocket流量(网络标签底部)
    2. 选择要查看框架的websocket请求
    3. 检查框架中的信息。是不是很多?
    4. 您可能会发现(正如我所做的)您正在将大量信息传输到浏览器,而这些信息不需要呈现模板。

      在这种情况下,请确保您已停用autopublish,然后使用field specifier发布您需要的数据。