首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ember存储中卸载大量(100,000+)记录

从ember存储中卸载大量(100,000+)记录
EN

Stack Overflow用户
提问于 2017-08-16 03:16:25
回答 1查看 270关注 0票数 2

我在ember存储中有大量的特定类型的模型,这里有大约100,000条或更多的记录,我通过将一个JSON对象传递给该存储的createRecord方法创建了该模型。当我尝试使用store.unloadAll('record-type')卸载所有这些记录时,这些记录最终都会从存储中完全卸载,但操作需要大约90秒才能完成。

更让我困惑的是,unloadAll方法会立即返回,并且没有返回promise,但web将冻结,并且,使用ember检查器,我可以看到所有记录仍然存在,直到大约90秒后它们最终消失。

我从一个操作中调用unloadAll方法,如下所示:

代码语言:javascript
复制
    actions: {
        unloadStore() {
            console.log('calling unloadAll');
            this.get('store').unloadAll('record-type');
            console.log('unloadAll returns immediately');
        }
    }

我创建这些模型,如下所示:

代码语言:javascript
复制
    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执行期间更改记录数组所触发的其他事件有关。性能配置文件的屏幕截图链接为here

EN

回答 1

Stack Overflow用户

发布于 2018-10-03 04:37:39

我也有同样的问题,这对我很有效:

代码语言:javascript
复制
// 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
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45699951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档