Sencha touch 2 (Sencha 2.2中新增)数据存储加载大数据集冻结应用程序的数据
我的应用程序中有一个数据存储,在特定的用户操作中,通过本地txt文件(总共100kb)加载相当大的数据集。在升级到Sencha 2.2之前,加载该数据集的速度相当快,对应用程序性能没有任何影响 现在我已经升级到Sencha 2.2,加载这些数据会完全冻结应用程序。即使我在电脑上运行应用程序,也需要大约5分钟的时间才能解冻 我尝试了两种方法:setData()和通过代理加载(下面的代码)。两种方法都有相同的结果。我已经筛选了Sencha 2.2变更日志,没有找到任何与数据存储相关的变更。我在这里很茫然。任何帮助都会很棒 本地代理方法:Sencha touch 2 (Sencha 2.2中新增)数据存储加载大数据集冻结应用程序的数据,sencha-touch-2,Sencha Touch 2,我的应用程序中有一个数据存储,在特定的用户操作中,通过本地txt文件(总共100kb)加载相当大的数据集。在升级到Sencha 2.2之前,加载该数据集的速度相当快,对应用程序性能没有任何影响 现在我已经升级到Sencha 2.2,加载这些数据会完全冻结应用程序。即使我在电脑上运行应用程序,也需要大约5分钟的时间才能解冻 我尝试了两种方法:setData()和通过代理加载(下面的代码)。两种方法都有相同的结果。我已经筛选了Sencha 2.2变更日志,没有找到任何与数据存储相关的变更。我在这里很
Ext.define("addable_exercises", {
extend: "Ext.data.Model",
config: {
idProperty: 'id',
fields: [
{ name: 'ex_id'},
{ name: 'ex_name'},
{ name: 'ex_alias'},
{ name: 'ex_type'},
{ name: 'prot_type'}
]
}
});
var all_exercises = Ext.create('Ext.data.Store', {
storeId: 'all_exercises',
model: 'addable_exercises',
proxy: {
type: 'ajax',
url: 'resources/textfiles/datastores/all_exercises.txt'
}
});
Ext.getStore('all_exercises').load()
Ext.define("addable_exercises", {
extend: "Ext.data.Model",
config: {
idProperty: 'id',
fields: [
{ name: 'ex_id' },
{ name: 'ex_name'},
{ name: 'ex_alias'},
{ name: 'ex_type'},
{ name: 'prot_type'}
]
}
});
var all_exercises = Ext.create('Ext.data.Store', {
storeId: 'all_exercises',
model: 'addable_exercises'
});
Ext.Ajax.request({
url: 'resources/textfiles/datastores/all_exercises.txt',
success: function(response, opts) {
var exercise_list = response.responseText;
var all_exercises_store = Ext.getStore('all_exercises');
all_exercises_store.setData(exercise_list);
}
});
setData()方法:
Ext.define("addable_exercises", {
extend: "Ext.data.Model",
config: {
idProperty: 'id',
fields: [
{ name: 'ex_id'},
{ name: 'ex_name'},
{ name: 'ex_alias'},
{ name: 'ex_type'},
{ name: 'prot_type'}
]
}
});
var all_exercises = Ext.create('Ext.data.Store', {
storeId: 'all_exercises',
model: 'addable_exercises',
proxy: {
type: 'ajax',
url: 'resources/textfiles/datastores/all_exercises.txt'
}
});
Ext.getStore('all_exercises').load()
Ext.define("addable_exercises", {
extend: "Ext.data.Model",
config: {
idProperty: 'id',
fields: [
{ name: 'ex_id' },
{ name: 'ex_name'},
{ name: 'ex_alias'},
{ name: 'ex_type'},
{ name: 'prot_type'}
]
}
});
var all_exercises = Ext.create('Ext.data.Store', {
storeId: 'all_exercises',
model: 'addable_exercises'
});
Ext.Ajax.request({
url: 'resources/textfiles/datastores/all_exercises.txt',
success: function(response, opts) {
var exercise_list = response.responseText;
var all_exercises_store = Ext.getStore('all_exercises');
all_exercises_store.setData(exercise_list);
}
});
事实证明,问题不在于实际的数据存储,而是我的代码在加载该存储后立即执行的操作:将该海量存储与dataview列表关联。在Sencha 2.2中,默认情况下列表不再设置为
infinite
(我认为这是短列表的性能考虑),因此作为非无限列表,它在显示任何内容之前解析每个列表项。启用无限后,它允许在后台加载项目
var list = new Ext.dataview.List({
id: 'search_list',
height: 500,
width: 500,
infinite: true,
loadingText:'loading...',
store: 'all_exercises',
itemTpl: [
'<tpl for=".">',
'<div class="feed_item">',
'<div class="avatar">{ex_name}</div>',
'</div>',
'</div>',
'</tpl>'
]
});
var list=new Ext.dataview.list({
id:“搜索列表”,
身高:500,
宽度:500,
无限:是的,
loadingText:“正在加载…”,
商店:“所有的运动”,
第三方物流:[
'',
'',
“{ex_name}”,
'',
'',
''
]
});