Высокая задержка загрузки хранилищ в приложении ExtJS 4.1 MVC

В настоящее время я работаю над тем, чтобы превратить веб-приложение, созданное с помощью домашней библиотеки интерфейса, в стандартное приложение ExtJS MVC. Все работает нормально, за исключением запросов Ajax, которые имеют более высокие задержки при запуске страницы. Действительно, хотя файл, который я вызываю, на самом деле не отличается от того, что был раньше, иногда мне приходится ждать на 3-6 секунд больше, чем раньше, чтобы получить ответ.

Чтобы уменьшить объем моих исследований, я изменил код, чтобы он возвращал статические данные (простую строку json), исключив возможность проблемы с базой данных. Более того, я заметил, что с помощью «Replay XHR» в Google Chrome (панель «Сеть») я получаю ответ почти мгновенно.

Я думаю, что трудно помочь по этой теме, но надеюсь, что кто-то уже сталкивался с такой проблемой и может поделиться некоторыми советами о том, где исследовать.

Наблюдения

  • запросы, отсортированные по задержке (разрыв около 500 мс):

    введите здесь описание изображения

  • запросы, отсортированные по времени начала:

    введите здесь описание изображения


person leaf    schedule 07.02.2013    source источник


Ответы (1)


Я пробовал загружать один магазин за другим. При этом я сократил время загрузки всех магазинов примерно до полсекунды. Я не знаю, возникает ли эта проблема во всех браузерах, я проверю это однажды. Вот патч (не забудьте убрать autoLoad:true на все магазины):

// filters stores to load on startup
// store.self.getName() returns "AppName.store.MyStore"

var stores = Ext.StoreManager.filterBy(function (store) {
    return Ext.Array.indexOf(
        ['Store1', 'Store3', 'Store5'], 
        store.self.getName().split('.').pop()
    ) !== -1;
});

// loads one store after another

(function () {
    var callee = arguments.callee,
        store = stores.getAt(0);
    store.load({
        scope: this,
        callback: function () {
            stores.remove(store);
            if (stores.getCount()) {
                callee.call(this);
            } else {
                // all stores are now loaded
            }
        }
    });
}).call(this);
person leaf    schedule 11.02.2013