流星js发布和订阅的反应很慢

问题描述:

我用流星发布和订阅的方法与客户端和服务器交互。现在根据我的场景,我使用D3 js生成条形图,只要数据输入到mongo db集合中,我就使用客户端功能生成条形图。我的问题是发布和订阅太慢而无法做出反应。即使我限制了mongodb返回的文档数量,问题仍然存在。它也不一致,即它有时会在1秒内反应,而其他时间会需要4-5秒。请指导我做什么和我的实施出了什么问题。流星js发布和订阅的反应很慢

这里是服务器端的代码,

Test = new Mongo.Collection("test") 

Meteor.publish('allowedData', function() { 
    return Test.find({}); 
}) 

,这里是客户端代码,

Test = new Mongo.Collection("test") 
Meteor.subscribe('allowedData'); 
Meteor.setTimeout(function() { 
    Test.find().observe({ 
    added: function(document){ 
     //something 
    }, 
    changed:function(){ 
     //something 
    }, 
    removed:function(){ 
     //something 
    }, 
    }) 
+0

我认为从一般文件导入'Test'更优雅 – API

+0

您是否检查了TimeLine(在Chrome浏览器中)以查看每个操作的加载时间? – API

+0

感谢您的评论。不,我没有检查TimeLine。我没有明白你的意思,“我认为从一般文件导入测试更加优雅” – LearningNew

从你的意见,我看你需要一个报告图表是反应性的。尽管这是你的要求,但是像这样的图表太昂贵了。事实上,当你的系统变得越来越大时,假设你在一张图表上有大约10000个文档,这种图表会频繁地崩溃你的服务器。

要解决这个问题,我有两个建议:

  • 定义一个图表返回数据的方法。在客户端设置一个作业/间隔定时器,定期调用该方法。间隔值取决于你的需要,对图表来说10秒钟应该没问题。这种方式并没有完全反应,你只能在一段时间后得到最新的数据,但它仍然比慢速和崩溃频繁的系统要好。你可以找到好的模块来管理作业/计时器here
  • 使用这个流星包meteor-publish-join(免责声明:我是作者),它是为了解决您遇到的问题:需要对大数据集进行反应性聚合/连接,并且仍然具有良好的整体性能
+0

非常感谢您的回答。至于你的第一个选择,我认为是相同的,但我不允许这样做。但我一定会看看你的第二个选择。 – LearningNew