В вашем случае абсолютного нет, потому что вы используете фреймворк.Это работает так:
1) Код скрипта запрашивается из внешних файлов по мере постепенной загрузки страницы.Синтаксический анализатор HTML должен проанализировать теги сценария, прежде чем появится какое-либо понимание запроса сценария.Этот код выполняется при вызове, но он подается в интерпретатор JavaScript в тот момент, когда он становится доступным для интерпретатора JavaScript.
2) Код сценария, находящийся непосредственно на странице, подается в интерпретатор при анализе кода HTML.парсером HTML и тегом скрипта встречается.Код внутри функций выполняется при вызове, за одним исключением.В противном случае код выполняется сразу после интерпретации.Единственное исключение - когда за функциональным блоком сразу же следует «()», что указывает на немедленный вызов.
3) Большая часть кода, который выполняется первоначально, выполняется из вызовов функций, сделанных с событием «onload».Событие onload наступает, когда статический DOM полностью доступен из анализатора HTML и когда запрашиваются все запросы активов из исходного статического HTML.В некоторых крайних случаях со старыми браузерами возможно возникновение противоречивых условий, которые создают состояние гонки на странице, которое предотвращает запуск события onload или после чрезвычайной задержки.
4) Вы используете jQuery,так что вы находитесь в серьезном затруднении в отношении скорости доступности.Код jQuery - это код JavaScript, поэтому он должен вводить интерпретатор JavaScript точно так же, как любой другой JavaScript.Все предыдущие пункты из этого поста должны быть соблюдены, прежде чем любой код jQuery может быть выполнен.
5) Когда я выполняю A / B-тестирование, мне нужно, чтобы код выполнялся как можно раньше и максимально быстро, чтобы свести к минимумумерцание на странице, поэтому фреймворки определенно не вариант.В этом случае я выполняю следующие шаги:
5a) Я нахожу первый атрибут id непосредственно после узла (ов) DOM, к которому мне нужно получить доступ.5б) Я пишу функцию для проверки доступности этого узла.Если узел доступен, то области над ним доступны, поэтому я знаю, что я твердый.Рассмотрим следующий пример:
var test = function () {
var a = document.getElementById("first_node_lower_than_I_need");
if (a !== null && typeof a === "object") {
//my code here, because I know my target area is available
} else {
setTimeout(test, 100);
}
};
setTimeout(test, 100);
5c) Обратите внимание, что в приведенном выше примере кода я вызываю свою функцию с задержкой setTimout, чтобы дать DOM шанс на сражение.Если функция выполняется рано, это нормально, потому что я вызываю ее рекурсивно с задержкой, чтобы дать DOM дополнительное время для загрузки.Если вы установите задержку в 50 мс или меньше, вы увеличите время выполнения в IE8 и ниже из-за многочисленных ненужных вызовов функции.Я рекомендую оставить задержку равной 100 мс для идеального кросс-браузерного баланса, но если вы действительно хотите быстрое выполнение в новых браузерах, тогда установите первую задержку равной 50 мс, это за пределами функции, а другую оставьте равной 100 мс.
5d) Минимизируйте использование свойства innerHTML с помощью вышеуказанного метода или хорошо ознакомьтесь с целевой страницей, чтобы узнать, когда можно использовать innerHTML.Проблема с innerHTML состоит в том, что он изменяет вывод страницы, не сообщая об этих изменениях обратно в анализируемый DOM в памяти, что обычно является несущественным разъединением.Тем не менее, в этом случае это, безусловно, важно из-за того, насколько быстро и рано может выполняться введенный код.Это проблема, потому что другой код, который выполняется позже, например, с событием onload или событием ready jQuery, либо перезапишет ваши изменения, либо не сможет найти их соответствующую загрузку DOM и просто отбросит их выполнение все вместе.Это особенно важно, если вы нацелены на узел очень высокого уровня в дереве DOM, поэтому для вашей безопасности будьте очень внимательны при выборе узлов для использования innerHTML или просто использования методов DOM.Это немного сложнее в том смысле, что вы не можете использовать решение только для метода DOM, потому что вы не можете изменять текстовые узлы с помощью кросс-браузерного метода nodeValue, поскольку это не поддерживается в IE7.
Если вам необходимо выполнить код JavaScript до завершения анализа DOM, не используйте JavaScript-фреймворк. Пишите, используя обычный регулярный код JavaScript, и черт его оптимизируйте. В противном случае у вас всегда будет мерцание, и чем больше загрузка статического HTML, тем дольше и заметнее будет мерцание. Кроме того, код jQuery, как правило, выполняется намного медленнее, чем обычный оптимизированный JavaScript, из-за того, что он использует CSS-подобные селекторы. Если ваш внедренный код jQuery требуется для выполнения большой задачи на очень большом статическом HTML-документе, то вряд ли он завершит выполнение в IE7 без истечения времени ожидания.