【问题标题】:Meteor data subscription strategy流星数据订阅策略
【发布时间】:2015-12-25 19:34:34
【问题描述】:

我想要一些关于何时订阅客户端数据的建议。预先订阅所有需要的数据是最简单的,但我想在第一次加载时可能会对性能造成严重影响。 使用 Iron-Router,可以在路由期间完成订阅,然后根据需要填充数据,然后您可以等待,这很酷。

但订阅路由(尤其是在大型项目中)肯定会成为管理的噩梦,因为对于已订阅的数据没有全局视图。与此相关 - 如果从不同页面多次调用同一个订阅会发生什么?

【问题讨论】:

标签: meteor


【解决方案1】:

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

  1. 尽可能延迟订阅。
  2. 仅发布您需要的数据。

看看下面的例子:

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 个并集 N 个文档。这在meteor book中有更详细的讨论。

【讨论】:

    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 2012-10-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多