我想知道何时在客户端订阅数据。预先订阅所有需要的数据是最简单的,但我想成像可能会在第一次加载时出现严重的性能损失。 使用Iron-Router,可以在路由期间完成订阅,然后根据需要填充数据,并且您有waitOn,这很酷。
虽然订阅路线(特别是在大型项目中)肯定会成为管理的噩梦,因为没有全球视图已经订阅了哪些数据。与此相关 - 如果从不同的页面多次调用相同的订阅会发生什么?
答案 0 :(得分:2)
你认为立即激活所有订阅并不是一个好主意是正确的。每次激活订阅时,您都会在服务器和客户端上支付性能损失。如果您想最大限度地提高绩效,您的目标应该是:
看一下以下示例:
Meteor.subscribe('news');
Tracker.autorun(function() {
if (Meteor.user()) {
Meteor.subscribe('friends');
Meteor.subscribe('room', Session.get('roomId'));
}
});
friends
订阅会根据路由器设置的roomId
会话变量进行更改。我有一个复杂的制作应用程序,有很多路由,我个人觉得有一个订阅文件更容易维护。话虽如此,我认为这是一个品味问题所以你需要尝试两种方式,看看你最满意的是什么。
您上一个问题的答案是已发布的文档已合并。如果您为同一个集合激活了两个订阅,并且每个订阅都发布了相同的N个文档,那么您将在客户端上拥有N个文档。如果P1发布了N个文档,而P2发布了M个文档,那么客户端就会有M个union N文档。这在meteor book中有更详细的讨论。