流星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
},
})
答
从你的意见,我看你需要一个报告图表是反应性的。尽管这是你的要求,但是像这样的图表太昂贵了。事实上,当你的系统变得越来越大时,假设你在一张图表上有大约10000个文档,这种图表会频繁地崩溃你的服务器。
要解决这个问题,我有两个建议:
- 定义一个图表返回数据的方法。在客户端设置一个作业/间隔定时器,定期调用该方法。间隔值取决于你的需要,对图表来说10秒钟应该没问题。这种方式并没有完全反应,你只能在一段时间后得到最新的数据,但它仍然比慢速和崩溃频繁的系统要好。你可以找到好的模块来管理作业/计时器here。
- 使用这个流星包meteor-publish-join(免责声明:我是作者),它是为了解决您遇到的问题:需要对大数据集进行反应性聚合/连接,并且仍然具有良好的整体性能
+0
非常感谢您的回答。至于你的第一个选择,我认为是相同的,但我不允许这样做。但我一定会看看你的第二个选择。 – LearningNew
我认为从一般文件导入'Test'更优雅 – API
您是否检查了TimeLine(在Chrome浏览器中)以查看每个操作的加载时间? – API
感谢您的评论。不,我没有检查TimeLine。我没有明白你的意思,“我认为从一般文件导入测试更加优雅” – LearningNew