Шаблон для загрузки большого количества фрагментов сценария на событие готовности DOM без IE 8, отображающего предупреждение о превышении времени ожидания сценария - PullRequest
2 голосов
/ 19 апреля 2011

Я работаю над интерфейсом с большим количеством JavaScript - все это небольшие автономные фрагменты кода, предназначенные для выполнения различных действий в интерфейсе.

Все фрагменты (или блоки функциональности)., если хотите) находятся внутри одной и той же области видимости;событие, готовое к DOM.Это сделано для того, чтобы различные фрагменты могли совместно использовать несколько глобальных переменных области действия.

Вот как это структурировано ...

$(function ()
{
    var SCOPED_GLOBAL_1;
    var SCOPED_GLOBAL_2;
    // Etc.


    // A snippet of code designed to enable X functionality

    // Another snippet of code designed to enable Y functionality

    // Etc.
});

Используя этот подход, я получаю страшный сценарий времени -всплывающее окно из-за большого количества выполняемого кода.

Internet Explorer 8 определяет время ожидания сценария на основе количества выполненных вызовов ... И большого количества вызововделают ... Много!

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

IЯ пытался разделить код на несколько вызовов события DOM ready, но похоже, что Internet Explorer 8 интерпретирует эти вызовы так, как если бы они были одним вызовом.(Та же подпись при профилировании).

Код станет запутанным, если мне потребуется реализовать подход setTimeout.И обмен глобальными областями не будет легким.

У вас, ребята, есть шаблон, чтобы помочь мне?

Обновление

Как некоторые из вас предложили, оптимизация кода была бы способом справиться с этим.Я уверен, что в коде есть место для оптимизации, но, как я вижу;проблема заключается только в большей части кода, а не в том, как он работает.

Существует много предустановленного кода, который инициализирует различные компоненты пользовательского интерфейса.Именно этот код вызывает проблемы в Internet Explorer 8 ... из-за большого числа совершаемых вызовов. Не столько времени, сколько требуется для выполнения кода.

Код выполняетсяБыстро и хорошо во всех других браузерах, загрузка в среднем занимает полторы секунды (что быстро, по сравнению с тем, что происходит).Проблема заключается в том, что Internet Explorer 8 определяет сценарий как медленный по количеству выполняемых вызовов, тогда как все другие браузеры (и, по-видимому, IE 9) определяют тайм-аут ко времени, которое требуется для выполнения кода.

1 Ответ

0 голосов
/ 19 апреля 2011

Если не считать рефакторинга, setTimeout, вероятно, самый простой трюк в книге. Это также не должно быть грязным:

$(function () {
    var SCOPED_GLOBAL_1, SCOPED_GLOBAL_2;

    // Add code in blocks
    var codeBlocks = [];
    codeBlocks.push(function () {
        // A snippet of code
    });
    codeBlocks.push(function () {
        // Another snippet of code
    });

    // Execute code in blocks
    while (codeBlocks.length) {
        (function (func) {
            setTimeout(func, 0);
        })(codeBlocks.shift());
    }
});

Это, по сути, создает очередь из любого количества блоков кода для выполнения и выполняет их индивидуально, по порядку, с setTimeout().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...