TL; DR: 我正在为食堂制作应用程序。我有一个人和一个集合的集合,我和#34; log"每一块肉都吃了。我需要知道那些吃饭的人。
长版:
我正在申请当地的红十字会。
我试图优化这种情况:
有一个食堂,帮助人们可以在早餐,午餐和晚餐时吃点东西。我们需要知道吃了多少餐(这很容易)。
如果他们在场,他们必须吃饭吃饭,所以我们需要知道有多少(和谁)吃了(这是我需要优化的部分)。
当他们吃饭时,"收银员"插入条形码,程序记录"交易"在日志集合中。
实际上,在创建模板"食堂"我创建了一个本地收藏品#34;饭菜"并用数据库中所有人的数据填充它(如此ID,名称,禁食/饱食),然后我将这个集合用于我的计数器,并显示谁吃饭和谁没有。 (变量" mealKind" ="早餐" OR"午餐"或"晚餐"取决于实际服务。)
Template.canteen.created = function(){
Meals=new Mongo.Collection(null);
var today= new Date();today.setHours(0,0,1);
var pers=Persons.find({"status":"present"},{fields:{"Name":1,"Surname":1,"barcode":1}}).fetch();
pers.forEach(function(uno){
var vediamo=Log.findOne({"dest":uno.codice,"what":mealKind, "when":{"$gte": today}});
if(typeof vediamo=="object"){
uno['eat']="satiated";
}else{
uno['eat']="fasting";
}
Meals.insert(uno);
});
};
Template.canteen.destroyed = function(){
meals.remove({});
};
从膳食收集中,我将两个人的饱和度(姓名,姓名和条形码)和禁食结合起来,我也使用了两个帮手:
fasting:function(){
return Meals.find({"eat":"fasting"});
}
"countFasting":function(){
return Meals.find({"eat":"fasting"}).count();
}
//same for satiated
这没关系,但是现在人数确实在增加(我们已经计算了1000次并计算)并且页面的创建速度非常慢,并且通常会因错误而停止,因此我可以阅读" 100斋戒,400饱食"但我在DB中有大约1000人。
我无法弄清楚如何优化工作流程,我尝试的所有其他方法(以某种方式)对数据库的更多查询;我想我错过了这一点,现在我看不到它。 由于Minorongo,我不确定此级别和流星内部的聚合。
虽然使这个服务器端而不是客户端是聪明的,但这里的问题是如何区分"禁食" vs"满足"没有骑自行车所有的人。
如果解决方案与aleed兼容,则+1:表格
答案 0 :(得分:0)
修改强>
我仍然不确定导致性能问题的原因(客户端内存/ minimongo中有太多东西,调用太多东西?),但你至少可以尝试不同的方法,更传统的方法是基于你的服务器。 / p>
顺便说一句,您没有提及您显示数据的方式,也没有提及您已经提供/缺少Persons
的数量的错误读数?
如果您要构建经典HTML table
,请注意浏览器难以渲染超过几百行。如果您在这种情况下,您可以实现客户端表分页/无限滚动。查看jQuery DataTables插件(基于aldeed:tabular
)的示例。跳过构建实际HTML table
的步骤,并使用$table.rows.add(myArrayOfData).draw()
直接填写它以避免浏览器限制。
原始回答
我不完全理解为什么您需要将Persons
集合复制到客户端Meals
本地集合中?
这要求您拥有从服务器发送到客户端的Persons
的第一个所有文档(如果您的服务器连接良好/本地,这可能不会有问题。您可能还有{ {1}}打包,所以你已经看到了这个惩罚),然后克隆所有文件(检查你的autopublish
集合以检索任何以前的段落),有效地使你的记忆需求翻倍。
您的服务器和/或远程数据库是否慢速证明您需要在本地(客户端)执行所有操作?
可能会出现问题,如果您打开多个“收银台”/客户端浏览器,他们的Logs
本地馆藏将无法同步。
如果您的服务器 - 客户端连接良好,则没有理由在客户端执行任何操作。 Meteor将自动缓存所需内容,并提供乐观的数据库修改以保持用户体验快速(如果您正确构建代码)。
aldeed:tabular
包,您可以轻松地按“页面”显示Meals
大表。dburles:collection-helpers
将其与Persons
集合相关联(IIRC Logs
主页上有一个示例。)