在没有性能问题的情况下使用 Meteor 在客户端同步多个进度条

Syncing Multiple Progress Bars on Client Side using Meteor without Performance Issue

我想要完成什么? 在客户端,我有各种显示进度条的 divs。这些进度条中的每一个都显示不同的 status/level。它们都在动态更新。我需要它们继续动态更新而不会出现任何性能问题。

你说的是什么性能问题? 我的服务器端是 运行 一些能够检查客户端每个进度条状态的逻辑 运行。目前我有一个 setInterval 设置为十分之一秒以继续更新进度条状态级别。首先,我通过将数据直接保存到 mongo 集合来做到这一点,然后我让客户端通过模板助手返回状态来更新模板。这很好并且有效(在大多数情况下)。但是,当我添加一个模态框(也是一个反应式模态框)时,它会随着动态进度在已经 运行 主体模板的顶部打开,它会开始急剧减速。模式框还会显示用户单击的 div 的特定进度条。

长话短说,对性能的影响是巨大的,它会爬行。我认为这是由于服务器需要通过持久化到 mongo 数据库来执行如此多的进度条更新。实在是太多了。

我是如何解决这个问题的? 我决定尝试完全绕过 mongo 数据库的持久性来存储每个进度条的 status/level。这是通过实现包名 rocketchat:streamer

来实现的

此软件包提供“通过 DDP 的 2 种方式通信”。通过这样做,我能够将进度条级别存储到服务器上的本地缓存数组,然后通过 rocketchat:streamer 将数据通过 DDP 直接推送到客户端。这实际上导致了性能提升。

好的,那么你现在的问题是什么,你为什么要提交这个问题?

无论如何,在这两种策略中,我仍然遇到性能问题,有时登录到我的开发服务器的不同连接设备的同步没有获得准确的进度条同步状态。我需要所有进度条始终为浏览器中的所有连接用户显示相同的确切状态。我需要能够在模板上显示例如 9 个不同的独特进度条,并且当​​用户单击其中一个包含进度条的独特 div 时,可以在模式中显示另一个进度条。

伙计们,通过从服务器上执行的逻辑中获取数据,使用 Meteor 在客户端同步多个不同进度条的最佳方法是什么?

我正在寻找一种简单易行的方法来实现它。我知道对于这种类型的用例,必须有一种简单的方法来获得性能并与 Meteor 同步。

如有任何帮助,我们将不胜感激。

感谢社区中愿意参与的每一个人。

这已通过不包括通过 Meteor.publish 持续存在的所有旧过期数据解决。...

故事的寓意是,确保您没有向客户发布不需要的额外数据。通过使用例如带有 $nin 且不包括特定类型数据的查找来过滤结果,您将看到 Meteor 应用程序的性能显着提高。这也可以通过此处的其他示例进行更深入的审查:

Kadira.io - Meteor Performance 101