Javascript 从余烬存储中卸载大量(100000+;)记录
我在余烬存储中有大量(这里大约有100000条或更多)特定类型的记录,我通过将JSON对象传递给存储的Javascript 从余烬存储中卸载大量(100000+;)记录,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我在余烬存储中有大量(这里大约有100000条或更多)特定类型的记录,我通过将JSON对象传递给存储的createRecord方法创建了这些记录。当我尝试使用store.unloadAll('record-type')卸载所有这些记录时,这些记录最终都会从存储中完全卸载,但操作需要大约90秒才能完成 更让我困惑的是unloadAll方法会立即返回,并且不会返回承诺,但web GUI会冻结,并且,使用余烬检查器,我可以看到所有记录仍然存在,直到大约90秒后它们最终消失 我正在从以下操作调用unlo
createRecord
方法创建了这些记录。当我尝试使用store.unloadAll('record-type')
卸载所有这些记录时,这些记录最终都会从存储中完全卸载,但操作需要大约90秒才能完成
更让我困惑的是unloadAll
方法会立即返回,并且不会返回承诺,但web GUI会冻结,并且,使用余烬检查器,我可以看到所有记录仍然存在,直到大约90秒后它们最终消失
我正在从以下操作调用unloadAll
方法:
actions: {
unloadStore() {
console.log('calling unloadAll');
this.get('store').unloadAll('record-type');
console.log('unloadAll returns immediately');
}
}
for(let obj of data.response){
store.createRecord('record-type', {
'id': obj._id.$oid,
'prop1': obj.prop1,
'prop2': obj.prop2,
'prop3': obj.prop3
});
}
我正在创建这些模型,如下所示:
actions: {
unloadStore() {
console.log('calling unloadAll');
this.get('store').unloadAll('record-type');
console.log('unloadAll returns immediately');
}
}
for(let obj of data.response){
store.createRecord('record-type', {
'id': obj._id.$oid,
'prop1': obj.prop1,
'prop2': obj.prop2,
'prop3': obj.prop3
});
}
卸载这么多的记录需要80多秒,还是我做错了什么?我通过Chrome的性能分析器注意到,在ember.debug.js文件的
removeObject
方法中花费了大量时间。我认为这与arrayContentWillChange的重复触发以及在执行unloadAll
期间更改记录数组所触发的其他此类事件有关。性能配置文件的屏幕截图已链接。我也遇到了同样的问题,这对我很有效:
// route.js
actions: {
reloadModel() {
this.store.peekAll('my-model').forEach((r) => {
this.store.unloadRecord(r);
})
this.refresh(); // to force a fresh load of data from API
}
}
您是否尝试收集id(例如使用
peekAll
),然后在循环中调用unloadRecord
?我已将代码调整为store.peekAll('record-type').forEach(函数(obj){…})代码>在该循环中,我收集每个obj的ID。之后,我通过id查找记录并卸载,但不幸的是,我仍然遇到相同的行为。您是否在活动路由层次结构的其他位置观察到此集合?e、 g.当发生unloadAll('record-type')
时,是否有返回findAll('record-type')
的路径model()
钩子?在任何模型钩子中都没有引用该集合。它们在websocket服务中创建,在另一个服务和两个组件中对它们调用peekAll
。据我所知,除了可能已经内置到ember中的观察器之外,我们没有明确添加任何其他观察器。只有通过“peekAll”对模型进行迭代才能检索其属性。