JavaScript对象与minimongo效率
我的Meteor客户端从服务器接收数据并将其存储在minimongo中。这些数据保证在他们的会议期间不会改变,所以我不需要流星的反应。静态数据恰好通过该路径到达;让我们把它当作一个给定的 数据如下所示:JavaScript对象与minimongo效率,javascript,mongodb,meteor,minimongo,Javascript,Mongodb,Meteor,Minimongo,我的Meteor客户端从服务器接收数据并将其存储在minimongo中。这些数据保证在他们的会议期间不会改变,所以我不需要流星的反应。静态数据恰好通过该路径到达;让我们把它当作一个给定的 数据如下所示: {_id: 'abc...', val: {...}} 在客户机上,使用以下方法查找值是否更有效: val_I_need = Collection.findOne({id}) 或创建JavaScript对象: data = {} Collection.find().fetch().map((
{_id: 'abc...', val: {...}}
在客户机上,使用以下方法查找值是否更有效:
val_I_need = Collection.findOne({id})
或创建JavaScript对象:
data = {}
Collection.find().fetch().map((x) => {data[x._id] = x.val})
并将其用于查找:
val_I_need = data[id]
在数据大小或查找次数方面,是否存在一个转折点,在这个转折点上,更有效的方法会发生变化,或者超过了构建对象的初始成本?
FindOne
在更大的数据集上可能更有效,因为它使用游标进行查找,其中\u id
是索引键,而find().fetch()
方法需要获取所有文档,然后通过映射手动迭代
注意,findOne也可以替换为.find({u id:desiredId}).fetch()[0]
(假设它返回所需的文档)
更多关于这方面的信息,请参阅
但是,如果它只涉及一个事后没有反应性跟踪的对象,我宁愿通过“findOne”加载它,该方法从服务器返回:
export const getOne=new ValidatedMethod({
名称:“getOne”,
验证(查询){
//验证查询架构
// ...
},
运行(查询){
//检查权限
// ...
返回MyCollection.findOne(查询);
});
这避免了使用发布/订阅,从而在当前客户端模板上对此集合使用minimongo。想想看,发布/订阅已经初始化了一些反应性来观察集合,因此在某个地方消耗了一些计算量。我的直觉是,您永远不会达到一个性能提升的点它在一个物体上产生了显著的不同 更有可能的是,您的瓶颈将出现在发布/订阅机制中,因为将所有文档发送到客户端可能需要一段时间 通过使用Meteor方法检索数据,您将看到大型数据集的显著差异 在这一点上,您已经在一个普通的老javascript对象中找到了它,因此本机对象查找的性能也得到了很小的提高