我有一个订阅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 :(得分: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开发者工具来诊断问题。
如果数据需要很长时间才能完成,那么您可以深入了解websocket流量:
您可能会发现(正如我所做的)您正在将大量信息传输到浏览器,而这些信息不需要呈现模板。
在这种情况下,请确保您已停用autopublish,然后使用field specifier发布您需要的数据。