2016-09-04 7 views
0

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; 
} 

は現在、我々はちょうどオンデマンドそれを呼び出すと、それは問題ではなかったです。しかし、アプリ全体の通知を表示するために追加しようとしています。

私が調べた1つの方法は、Meteor.setInterval();関数でラップされたメソッドを呼び出して、セッション変数を更新することです。ここで

は、私はそれを呼び出すことを考えています方法は次のとおりです。

Meteor.setInterval(function() { 
    Meteor.call('getContactLimit', function(error, response) { 
    Session.set('contactLimit', response); 
    });  
}, 60000); 

別の可能性は、特定のアクションでそれを埋め込むされているので、それだけで具体的な活動で実行しますが、それはハック感じています。

アイデア?これを達成するより良い方法はありますか?

ありがとうございます!

+1

これに類似した雑用のために[synced-cron](https://github.com/percolatestudio/meteor-synced-cron)ライブラリを使用しています。うまくいけば助けになるかもしれません。 –

答えて

0

設定した間隔でthis.changedを実行するカスタムパブリッシュ機能を試してみます。公開のドキュメント(http://docs.meteor.com/api/pubsub.html)のcount-by-roomの例を参照してください。間隔をスケジュールするには、cronパッケージの1つを使用できます。

クライアントはこのハックについて知る必要はなく、他のカスタムパブリケーションと同様に購読することもできます。

関連する問題