当客户端订阅发布时,我知道有 2 个选项:{reactive:true (default(} 和 {reactive:false}。
如果我们使用的是 Meteor,我们很可能想要使用反应性,但有时我不需要实时更新,而是接近它。如何为发布/订阅设置间隔刷新率?
另一种情况:假设有 300 个客户端订阅了一个发布,数据发生了变化,所有客户端同时收到 DDP 更改消息。我可以在每个客户端更新之间创建某种延迟吗?我不希望 CPU 负载过高,用户注意到应用程序的响应速度不如平时快。
你可能会问自己:为什么这家伙要这样做?当您开始获得大量客户端时,由于所有实时更新,应用程序可能会很快变慢。在我的场景中,我不需要实时更新,但需要一些接近它的东西。示例:10 秒刷新率。
这是一个基本的想法(未经测试,很抱歉错误,但你明白了(:
var CatsProxy = new Meteor.Collection('CatsProxy')
if (Meteor.isServer) {
var Cats = new Meteor.Collection('Cats') // private, on server only
/* ... something causes Cats objects to be updated every half second ... */
// outside of a reactive context:
setInterval(function() {
var cat = Cats.find({_id: 123})
CatsProxy.update({_id: cat._id}, cat);
}, 60000) // once a minute
Meteor.publish("cats", function () {
return CatsProxy.find({_id: 123});
});
}
if (Meteor.isClient) {
Meteor.subscribe("cats");
Template.cats.helpers({
cat: function() {
// this is reactive
return CatsProxy.find({_id: 123})
}
})
}
现在,cats
模板每分钟仅更新一次,而不是每秒更新两次。