У меня серьезная проблема с производительностью при обновлении записей через отношение hasMany.(используя sencha extjs 4.0)
Предположим, у нас есть модель с отношением hasMany.Я перепишу свои настоящие вещи в упрощенной модели, основанной на спортивных командах и их игроках.
Ext.define('project.model.Team', {
extend: 'Ext.data.Model'
, fields: [
{name: 'id', type: 'int'}
, {name: 'name', type: 'string'}
]
, hasMany: [
{ model: 'project.model.Player', name: 'players' }
]
});
Ext.define('project.model.Player', {
extend: 'Ext.data.Model'
, fields: [
{name: 'id', type: 'int'}
, {name: 'team_id', type: 'int'}
, {name: 'name', type: 'string'}
, {name: 'attribute', type: 'int'}
]
, associations: [
{ type: 'belongsTo', model: 'project.model.Team', foreignKey: 'team_id', primaryKey: 'id' }
]
});
Предположим, что есть много команд и много игроков, но мы хотим что-то обновить для каждого игрокав конкретной команде.Возможно, команда играла в игру, поэтому мы добавляем одну сыгранную игру.Детали не важны.
Это был рабочий код.Это не было проблемой, пока у кого-то не было «команды» с большим количеством «игроков» в и без того довольно большой базе данных.Этот цикл занимает вечность в довольно скромном размере.Я думаю, что set вызывает дополнительные проверки на каждой итерации, а не просто setDirty.
teamStore.getById(record.get('item_id')).players().each(function(player) {
var player_instance = exceptionStore.getById(exception.get('id'));
player_instance.set('attribute', value);
});
playerStore.sync();
Это выполняется очень быстро, устанавливает атрибут для ссылочного объекта и ничего не делает.
teamStore.getById(record.get('item_id')).players().each(function(player) {
player.set('attribute', value);
});
teamStore.sync();
playerStore.sync();
Я думаю, что код не работает, потому что игроки - это просто какая-то ссылка, в которой нет информации, кроме их идентификатора в магазине игроков, но на самом деле они никак не связаны с магазином.
Естьесть ли какой-нибудь более быстрый способ связать игроков с командой и что-нибудь сделать?