Javascript 从余烬存储中卸载大量(100000+;)记录

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

我在余烬存储中有大量(这里大约有100000条或更多)特定类型的记录,我通过将JSON对象传递给存储的
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”对模型进行迭代才能检索其属性。