小编Set*_*h T的帖子

在创建数千个子记录后,Ember.js/Ember Data需要几分钟才能更新hasMany的父级

我是Ember.js的新手,在尝试创建数千条记录(确切地说是5300)并更新hasMany关系时遇到性能问题.在创建新记录之前,我正在向API请求检索记录.在承诺返回之后,我然后对每个记录下来的记录(5300)执行forEach以对新记录集进行计算.创建记录本身大约需要2秒钟.更新hasMany仅对前40个左右的记录快速启动,然后减慢到每秒约一个更新.

我还应该注意到,这是在一个组件内完成的.我知道这通常是anit-pattern,但在这种情况下,没有理由更改URL或转换.这是一个屏幕,用户可以从一个项目池(由路径提供)中进行选择,应用定价规则,然后根据这些项目创建一个事件(在路径中创建).这是一个沙箱,用于确定哪些项目将成为活动的一部分.一旦用户决定了他们的活动项目,我就会向该路线发送一个动作来执行实际的保存并持续到我的后端.在反模式方面之外,我无法看到这将如何影响hasMany更新的性能.

我正在使用RESTAdapter和RESTSerializer来获取它的价值,但这不应该对我有任何影响,因为我只是处理Ember数据存储.

灰烬版:

Ember             : 2.5.1
Ember Data        : 2.5.3
jQuery            : 2.2.3
Ember Simple Auth : 1.1.0
Run Code Online (Sandbox Code Playgroud)

有问题的两个模型如下......

儿童模特(事件项目):

export default DS.Model.extend({
  event: DS.belongsTo('event'),
  itemNumber: DS.attr('string'),
  styleNumber: DS.attr('string'),
  tier: DS.attr('string'),
  eventPrice: DS.attr('number')
});
Run Code Online (Sandbox Code Playgroud)

父模型(事件):

export default DS.Model.extend({
  eventTypeId: DS.attr('string'),
  eventName: DS.attr('string'),
  eventDesc: DS.attr('string'),
  startDate: DS.attr('moment-date'),
  endDate: DS.attr('moment-date'),
  priority: DS.attr('number'),
  statusCode: DS.attr('string'),
  value: DS.attr('number'),
  eventItems: DS.hasMany('event-item', {async:true})
});
Run Code Online (Sandbox Code Playgroud)

活动创建记录:

model() {
    return this.store.createRecord('event', {});
},
Run Code Online (Sandbox Code Playgroud)

负责创建记录和更新hasMany的组件中的代码块:

this.get('store').query('pricing', {brandCd: '00'}).then(tiers => {
    tiers.forEach(tier => {
        this.get('event').get('eventItems').createRecord({
            styleNumber: tier.get('styleNumber'),
            itemNumber: tier.get('itemNumber'), …
Run Code Online (Sandbox Code Playgroud)

javascript ember.js ember-data

6
推荐指数
1
解决办法
164
查看次数

标签 统计

ember-data ×1

ember.js ×1

javascript ×1