我是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)