使用Meteor方法获得合理新数据的最佳,最有效的方法是什么,而不是经常运行?
我有一个服务器端Meteor方法,必须检查3-4个集合才能返回正确的值集。
我们在整个应用程序的几个地方使用此方法,但经常运行似乎非常昂贵。
以下是方法:
getContactLimit() {
let currentOrg = Meteor.user() && Meteor.user().profile && Meteor.user().profile.currentOrg,
orgData = Orgs.findOne( { 'domain': currentOrg } ),
orgStatus = orgData && orgData.status,
orgPlan = orgData && orgData.billing && orgData.billing.plan,
allPlans = Meteor.settings.public.plans,
thisPlan = _.find( allPlans, function(plan){ return plan.name == orgPlan; } ),
planContacts = thisPlan && thisPlan.contacts,
contactCount = Contacts.find({ 'orgId': currentOrg }).count(),
countObj = {
planCount: planContacts,
orgCount: contactCount
};
return countObj;
}
目前我们只是按需调用它,这不是问题。但我们即将添加它以在整个应用程序中显示通知。
我看过的一种方法是调用包含在Meteor.setInterval();
函数中的方法并让它更新会话变量。
以下是我打算如何调用它:
Meteor.setInterval(function() {
Meteor.call( 'getContactLimit', function( error, response ) {
Session.set('contactLimit', response );
});
}, 60000 );
另一种可能性是将其嵌入到某些操作中,因此它只能在特定的活动上运行,但这会让人感到烦恼。
有什么想法吗?有没有更好的方法来实现这一目标?
谢谢!
答案 0 :(得分:0)
我会尝试一个自定义发布函数,在其中我将以设定的间隔运行this.changed
。请参阅发布文档(http://docs.meteor.com/api/pubsub.html)中的按房间计算示例。您可以使用其中一个cron包来安排时间间隔。
然后客户端不需要知道这个hack,并且可以像任何其他人一样订阅自定义出版物。