流星数据订阅策略

时间:2013-12-20 13:06:17

标签: meteor

我想知道何时在客户端订阅数据。预先订阅所有需要的数据是最简单的,但我想成像可能会在第一次加载时出现严重的性能损失。 使用Iron-Router,可以在路由期间完成订阅,然后根据需要填充数据,并且您有waitOn,这很酷。

虽然订阅路线(特别是在大型项目中)肯定会成为管理的噩梦,因为没有全球视图已经订阅了哪些数据。与此相关 - 如果从不同的页面多次调用相同的订阅会发生什么?

1 个答案:

答案 0 :(得分:2)

你认为立即激活所有订阅并不是一个好主意是正确的。每次激活订阅时,您都会在服务器和客户端上支付性能损失。如果您想最大限度地提高绩效,您的目标应该是:

  1. 尽可能延迟订阅。
  2. 仅发布您需要的数据。
  3. 看一下以下示例:

    Meteor.subscribe('news');
    
    Tracker.autorun(function() {
      if (Meteor.user()) {
        Meteor.subscribe('friends');
        Meteor.subscribe('room', Session.get('roomId'));
      }
    });
    
    • 为所有客户启动新闻订阅。通常你想避免这种情况,但也许这是一个要求所有人(登录或不登录)应该看到一些新闻。这是记住目标的好时机(2):考虑只发布N个最新的新闻而不是全部新闻。
    • 其他订阅仅在用户登录时激活(节省资源并延迟订阅)。
    • friends订阅会根据路由器设置的roomId会话变量进行更改。

    我有一个复杂的制作应用程序,有很多路由,我个人觉得有一个订阅文件更容易维护。话虽如此,我认为这是一个品味问题所以你需要尝试两种方式,看看你最满意的是什么。

    您上一个问题的答案是已发布的文档已合并。如果您为同一个集合激活了两个订阅,并且每个订阅都发布了相同的N个文档,那么您将在客户端上拥有N个文档。如果P1发布了N个文档,而P2发布了M个文档,那么客户端就会有M个union N文档。这在meteor book中有更详细的讨论。