1

私のアプリには、特定のユーザー アクションで、ローカル txt ファイル (合計 100 kb) を介してかなり大きなデータ セットが読み込まれるデータ ストアがあります。Sencha 2.2 にアップグレードする前は、そのデータセットの読み込みはかなり速く、アプリのパフォーマンスへの影響はありませんでした。

Sencha 2.2 にアップグレードしたので、そのデータをロードするとアプリが完全にフリーズします。コンピューターでアプリを実行している場合でも、アプリがフリーズするのに約 5 分かかります。

setData() とプロキシ経由のロード (以下のコード) の 2 つのアプローチを試しました。どちらのアプローチも同じ結果になります。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 に答える