使用Meteor在客户端同步多个进度条而不会出现性能问题

时间:2017-04-10 16:31:28

标签: mongodb meteor ddp

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

您在谈论哪些性能问题? 我的服务器端运行一些逻辑,能够检查客户端上运行的每个进度条的状态。目前我有一个setInterval设置为十分之一秒继续更新进度条状态级别。首先,我通过将数据直接保存到mongo集合来完成此操作,然后客户端通过模板帮助程序返回状态来更新模板。这很好并且有效(大多数情况下)。然而,当我添加一个模态框(也是一个反应式模式框),它将打开已经运行的主体模板的动态进展的ontop,它将开始显着减慢。模式框还会显示用户单击的div的特定进度条。

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

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

来实现的

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

好的,那么您现在的问题是什么?为什么要提交此问题?

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

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

我正在寻找一种简单易行的方法来实现这一点。我知道必须有一种简单的方法来同时使用Meteor进行性能和同步这种用例。

非常感谢任何帮助。

感谢社区中的所有人提供报道。

1 个答案:

答案 0 :(得分:0)

通过不包括通过Meteor.publish持续存在的所有旧过期数据来解决这个问题....

故事的寓意,确保您不向您的客户发布您不需要的额外数据。通过使用例如$ nin的查找过滤结果并且不包括特定类型的数据,您将在Meteor应用程序中看到显着的性能提升。这里还可以通过其他示例进行更深入的回顾:

Kadira.io - Meteor Performance 101