我有upvotes和downvotes,它们都在集合中,并在模板中显示为{{upvotes}}
和{{downvotes}}
。
所以,如果我要有一个显示总票数的第三个显示器,我是否应该通过下面的帮助器进行操作(不按顺序工作):
在helper.js中:
Template.registerHelper('totalvotes', function(upvotes, downvotes) {
var totalvotes = upvotes + downvotes;
return totalvotes;
});
在html中:
{{ totalvotes "Vote"}}
我记得有关性能的事情而不是计算客户端级别的所有字段。在这种情况下,通过添加totalvotes字段而不是在客户端中拥有帮助程序,在主对象集合中增加是否更好? (包括粗略形式的建议代码)。谢谢!
例如在集合(字段)中:
upvotes: 0
downvotes: 0
然后是增量逻辑
$inc: {upvotes: 1}
$inc: {downvotes: 1}
到
upvotes: 0
downvotes: 0
totalvotes: 0
$inc: {upvotes: 1}
$inc: {downvotes: 1}
$inc: {totalvotes: 1}
答案 0 :(得分:2)
你不应该过于字面意思地接受这个建议,因为这实际上取决于你正在做什么。
对于这个特殊情况,我认为在客户端使用帮助程序进行数学计算要好得多(这只是对帮助程序的额外调用,并且会做一些非常简单的事情处理)而不是在数据库上添加额外的非规范化字段,这会增加更大的总体开销(存储在磁盘,内存空间,网络数据上)。
获取灵感:
"程序员浪费了大量时间来思考或担心程序中非关键部分的速度,而这些效率尝试实际上在考虑调试和维护时会产生很大的负面影响。我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源。然而,我们不应该在关键的3%中放弃我们的机会。" - 唐纳德克努特
答案 1 :(得分:2)
我同意@dooart的回答。
关于你的助手不工作,我建议在pageSession反应变量中存储upvotes和downvotes(使用reactive-dict)。
这样,您不必将2个参数传递给助手,并且您获得反应性投票计数:您的每个downvotes,upvotes和totalvotes helper只返回相关变量(或者它们在totalvotes中的总和)< / p>