В IE6/7 JavaScript будет препятствовать линейке страницы из двух аспектов:
Ресурсы веб -страницы под тегом сценария перестают запрашивать и загружать до загрузки скрипта.
Элемент HTML под тегом сценария прекратит рендеринг до загрузки сценария.
В IE6/7 Firefox2/3 Safari3 Chrome1 и Opera теги скрипта будут препятствовать загрузке:
Хотя сценарий может быть одновременным в IE8, Safari4 и Chrome2, он все еще препятствует загрузке других ресурсов:
Есть 6 способов загрузить скрипт параллельно с другими ресурсами:
1.xhr Eval - Скрипт загрузки через XHR (объект xmlhttprequest), а затем используйте метод Eval для выполнения ответа XHR.
2.xhr Inception - Загрузите скрипт через XHR, затем создайте тег скрипта и вставьте его в документ (тег для тела или головы), а затем установите текстовый атрибут тега скрипта значению ответа XHR.
3.xhr в iframe - поместите тег скрипта в iframe и загрузите его через iframe
4.Script DOM -элемент - создайте тег сценария и укажите атрибут SRC на адрес своего скрипта
5. СКОРОСТЬ ОТКРЫТИЕ - Добавьте атрибут DEFE сценария тега сценария. Это действительно только в IE, но Firefox3.1 также поддерживает этот атрибут.
6. Используйте метод документа. Для написания <script src = ""> На странице это действительно только в т.е.
Вы можете просмотреть примеры использования каждого метода через Cuzillion.
Если есть некоторые встроенные сценарии, которые необходимо выполнять после выполнения внешних сценариев, их необходимо синхронизировать. Названный «Соединение», связывание асинхронных сценариев, в этой статье представлены некоторые методы, которые в настоящее время могут реализовать «соединение».
Headjs, может позволить JS загружать одновременно (но выполнять последовательно): http://headjs.com/
Кода -копия выглядит следующим образом:
head.js ("/path/to/jquery.js", "/google/analytics.js", "/js/site.js", function () {
// все сделано
});
// самый простой случай. Загрузите и выполните отдельный сценарий без блокировки.
head.js ("/path/to/file.js");
// загрузите сценарий и выполните функцию после загрузки
head.js ("/path/to/file.js", function () {
});
// загружать файлы параллельно, но выполнить их в последовательности
head.js ("file1.js", "file2.js", ... "filen.js");
// выполнить функцию после загрузки всех сценариев
head.js ("file1.js", "file2.js", function () {
});
// файлы загружаются параллельно и выполняются, чтобы они прибыли
head.js ("file1.js");
head.js ("file2.js");
head.js ("file3.js");
// предыдущее также можно записать как
head.js ("file1.js"). js ("file1.js"). js ("file3.js");