我使用流星发布和订阅方法与客户端和服务器进行交互。现在根据我的情况,我正在使用D3 js生成条形图,并且一旦将数据输入到mongo db集合中,我就在使用客户端函数来生成条形图。我的问题是发布和订阅反应太慢。即使我限制了mongodb返回的文档数量,问题仍然存在。它也不一致,即有时会在1秒以下做出反应,而其他时候则需要4-5秒。请指导我该怎么做以及我的实施存在什么问题。

这是服务器端代码,

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
    },
    })

最佳答案

从您的评论中,我看到您需要一个反应式的报告图表。尽管这是您的要求,但是拥有这样的图表太昂贵了。实际上,当您的系统变大时,假设一张图表有大约10000个文档,这种图表将经常使服务器崩溃。

要变通解决此问题,我有两个建议:


定义一个返回图表数据的方法。在客户端中设置作业/间隔计时器以定期调用该方法。间隔值取决于您的需要,图表应以10秒为宜。这种方式不是完全被动的,您只能在一定间隔后才获取最新数据,但它仍然比慢速且频繁崩溃的系统要好。您可以找到很好的模块来管理作业/计时器here
使用此Meteor软件包meteor-publish-join(免责声明:我是作者),它可以解决您遇到的这类问题:需要在大数据集上进行反应性聚合/联接,并且仍具有良好的整体性能

关于javascript - Meteor js的发布和订阅 react 非常慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41804539/

10-09 14:51