1

我的应用程序中有一个数据存储,在特定的用户操作中,它通过本地 txt 文件(总共 100kb)加载了相当大的数据集。在我升级到 Sencha 2.2 之前,加载该数据集的速度相当快,对应用程序性能的影响为 0。

现在我已经升级到 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()

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'
});

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);
    }
});
4

1 回答 1

0

原来问题不在于实际的数据存储,而是我的代码在加载该存储后立即执行的操作:将那个庞大的存储与数据视图列表相关联。在 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>'
            ]
        });
于 2013-06-08T21:46:07.680 回答