假设需要向Meteor应用程序的每个客户端发送相同的10,000个文档集合.
在高层次上,我知道服务器为每个客户端订阅执行一些簿记 – 即,它跟踪订阅的状态,以便它可以为客户端发送适当的更改.但是,如果每个客户端具有相同的大型数据集,其中每个文档具有许多字段,则这是非常低效的.
似乎有used to be a way to send a “static” publish down the wire,初始查询已发布,并且从未再次更改过.这似乎是一种更有效的方法.
在当前版本的Meteor(0.6.5.1)中是否有正确的方法可以做到这一点?
编辑:作为澄清,这个问题不是关于客户端反应.它是关于减少客户端集合的服务器端跟踪的开销.
一个相关的问题:Is there a way to tell meteor a collection is static (will never change)?
更新:事实证明,在Meteor 0.7或更早版本中执行此操作会产生一些严重的性能问题.有关我们如何解决这个问题,请参阅https://stackoverflow.com/a/21835534/586086.
最佳答案
http://docs.meteor.com/#find:
Statics.find({},{reactive:false})
编辑反映评论:
您是否有一些信息表明被动:假参数只是客户端?你可能是对的,这是一个合理的,可能是可能的解释.我没时间检查,但我认为这也可能是服务器端指令,说不要轮询mongo结果集.肯学习…
你说
However, this is horribly inefficient if each client has the same large data set where each document has many fields.
现在我们可能会讨论服务器代码的效率,以及它对从服务器外部发生的更新的mongo源的轮询.请提出另一个问题,这远远超出我的回答能力!我怀疑每个连接的客户端发生一次,更可能是app server info和mongo server之间的同步.
客户端要求您发出问题,包括排序,如果所有客户都被标记为非反应性.这与您是否可以使用排序说明发布它们,或者是否可以通过其他反应性重新触发它们,但不需要包括访问服务器之间是分开的.一旦每个文档到达客户端,它就会被缓存.你仍然可以做任何最小的事情,没有能力的损失.如果有更新,没有客户端询问服务器,您不需要关闭它.服务器仅在需要时才推送.