【问题标题】:Does overlapping subscriptions in Meteor make performance worse?Meteor 中的重叠订阅是否会使性能变差?
【发布时间】:2016-10-12 06:51:21
【问题描述】:

这是我的问题。

我有一个应用程序,用户可以在其中将笔记存储在记事本中。

当前,当用户单击记事本时,我订阅了一个出版物,该出版物返回该记事本的前 5 个笔记。

因此,每当用户导航到新记事本时,都会设置一个新订阅,并且该记事本的 5 个笔记最终会出现在 minimongo 中。所以 minimongo 一次只有 5 个笔记在笔记集合中

为了改善用户体验,我更改了发布,因此在整个应用程序初始加载时,我订阅了一个发布,该发布返回所有记事本和每个记事本的前 5 个笔记。因此,现在在 minimongo 中,我们始终拥有 (5 x (# of notepads)) 数量的笔记。

所以初始负载有点重,但我希望在那之后,在记事本之间导航会更快。

所以在加载时我订阅了myInfo,它会返回用户的记事本和每个记事本的 5 个笔记。

然后当你实际点击一个记事本时,我订阅了myNotepadInfo,它也返回了记事本的前5个笔记。由于初始订阅已经检索到此信息,因此 minimongo 中的任何文档都没有实际更改。但我仍然想订阅myNotepadInfo,因为我有一个加载更多注释机制,这取决于模板中的订阅。

所以我的应用程序完全可以处理这些更改,但我不确定幕后发生了什么,以及这种方法是否真的有助于提高性能。我没有注意到更改后记事本加载方式的具体差异。

所以基本上我有第二个订阅,它与初始订阅重叠。

在我看来,由于第二次订阅与最初的订阅重叠,它必须向客户端传输更少的文档,所以它应该更快?

【问题讨论】:

  • From meteor documentation: '但是,如果你的 run 函数的下一次迭代订阅相同的记录集(相同的名称和参数),Meteor 足够聪明,可以跳过浪费的取消订阅/重新订阅。' 我认为在启动时订阅所有内容并不是一个好习惯。大量记事本会大大增加您的加载时间。这就是订阅的原因。如果您想进一步实现动态加载/搜索,easy:search 是一个不错的选择。

标签: meteor meteor-publications


【解决方案1】:

这方面的两个关键问题是(1)您向客户端发送了多少数据? (2) 您预计有多少用户?

第二点需要一些解释。 Meteor 当前 (2016) pub sub 架构中的一个关键组件是客户端订阅在服务器上注册和跟踪。每个无法重复使用的附加订阅(即不重复另一个订阅)都会增加应用程序的 CPU 需求。在这里,听起来每个用户都“拥有”一个记事本(尽管可能并非如此)。如果是这样,这将意味着订阅重复使用率低——每个用户都需要一个独立的订阅来接收他/她的记事本,因为它们不能在用户之间重复使用。因此,每个用户两次记事本订阅将有效地使应用程序的 CPU 占用量因记事本订阅而增加一倍。

这不一定是坏事。如果您的应用程序是为管理、内部服务或只是为较少数量的用户而设计的,那么它可能不会产生明显的差异。对于一个面向消费者的应用程序希望/期望高用户数,这将是一个糟糕的选择。

Kadira 写的一篇关于观察者重用 is here 的好文章,我也推荐他们的(付费)Bulletproof Meteor 文章。

最后,您可以查看一些旨在改善这些问题的 Kadira 工具,Subs ManagerFast Render。不过,您应该检查它们是否仍在积极维护中 - 我没有。

【讨论】:

  • 嗨,杰里米,谢谢,这很有帮助。用户确实订阅了他们自己的信息。在出版物中,我在查询中使用this.userId 返回记事本和笔记。我该怎么做?我不明白,这似乎是订阅您自己的数据的唯一方法。无法将其设置为用户共享订阅。我错过了什么吗?
  • 我认为您没有遗漏任何东西。如果您在出版物中执行return Notepads.find({userId: this.userId}) 之类的操作,您将无法重用观察者,因此最好使用您在问题中概述的两种策略中的第一种。每个用户每个记事本两次订阅将很快导致 CPU 问题,这是 Meteor 扩展的主要瓶颈。 (唯一会稍微提高效率的方法是对 this.userId 进行空值检查,上面链接的 Kadira 文章中引用了它,但这并没有真正解决主要问题。)
猜你喜欢
  • 2014-02-18
  • 2017-04-14
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多