2017-08-03 129 views
-1

我正在MongoDB中使用相当大的数据,并在我的Meteor应用程序中使用它。但是,数据的大小导致网页加载非常缓慢。流星 - 缓慢加载大数据集

该集合大小约为17MB,包含84,000个文档。

Collection

使用发布/订阅方法我有以下代码:

进口 - >两者 - > MyCollection.js:

import { Mongo } from 'meteor/mongo'; 

export const statistics = new Mongo.Collection('statistics'); 

服务器 - > Main.js:

import { Meteor } from 'meteor/meteor'; 
import { HTTP } from 'meteor/http'; 
import { statistics } from '/imports/both/MyCollection'; 

Meteor.publish('statistics', function publishSomeData() { 
    return statistics.find(); 
}); 

客户端 - > Main.js:

import { Meteor } from 'meteor/meteor'; 
import { Template } from 'meteor/templating'; 
import { ReactiveVar } from 'meteor/reactive-var'; 
import { statistics } from '/imports/both/MyCollection'; 
import './main.html'; 

Template.application.onCreated(function applicationOnCreated() { 
    this.subscribe('statistics'); 
}); 

Template.application.onRendered(function applicationOnRendered() { 
this.autorun(() => { 
    if (this.subscriptionsReady()) { 
     const statisticsData = statistics.findOne(); 
     console.log(statisticsData); 
    } 
    }); 
}); 

所以就像我说的这种方法的工作原理和控制台记录数据。然而,使用大约60mbps的互联网连接需要大约2分钟的时间来加载页面,最后控制台记录数据,有时我只是得到'Google没有响应'的警报,我不得不强制退出。

什么是更有效的方式加载数据到应用程序,以避免这种非常缓慢的加载时间?任何帮助将不胜感激。

非常感谢,

回答

1

限制数据的发布到客户端的数量。

要么只发布统计信息收集或“延迟加载”文档的某些字段 - 要将大量文档参数传递给发布,并使用find的limit选项仅将多个文档发送给客户端。

或者,根据需要在服务器上编译数据,并仅将编译后的数据发送到客户端。

更多具体的例子不知道集合的性质不能给出。

+1

如果您认为这些解决方案可能有效,我可以提供片段来演示其实施。 –

+0

感谢您的回答Seb。我的问题是应用程序中需要提供给我的所有文档,因此只发布部分数据量不适合我。懒惰加载听起来像是一个合适的选择,如果你有一个例子,我可以看到这将是伟大的!谢谢 – GBT97

+1

这里有个很好的例子(https://www.packtpub.com/mapt/book/web_development/9781783988129/4/ch04lvl1sec41/lazy-loading-posts)。它有几个快速部分,在页面底部有一个“下一部分”按钮。这是否清楚地解释了模式? –