Как предотвратить блокировку JavaScript HTML - PullRequest
4 голосов
/ 26 января 2010

Как запретить JavaScript блокировать запуск других JavaScript-файлов для загрузки?

На моем веб-сайте есть следующее:

<html>
<body>
....
<script type="text/javascript" src="http://example.com/ex.js"></script>
<script type="text/javascript" src="http://google.com/google-maps.js"></script>
</body>
</html>

Когда я использую надстройку YSlow Firefox, из вкладки сетевого трафика видно, что google.com/google-maps.js JavaScript не начнет загружаться, пока ex.js не завершит загрузку.

Вопрос : Как я могу одновременно ex.js и google-maps.js начать загрузку сразу и параллельно?

Ответы [ 4 ]

3 голосов
/ 13 мая 2011

Использование атрибута <script> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * из них: * 100 *

* * * *и оба поддерживают необязательный обработчик onload для решения общей необходимости выполнить инициализацию, которая зависит от сценария.Разница между async и defer заключается в том, что сценарий выполняется.Каждый сценарий async выполняется при первой возможности после завершения загрузки и до события window load.Это означает, что вполне возможно (и вероятно), что сценарии async выполняются не в том порядке, в котором они встречаются на странице.Сценарии defer, с другой стороны, гарантированно выполняются в том порядке, в котором они встречаются на странице.Это выполнение начинается после того, как синтаксический анализ полностью завершен, но до события document DOMContentLoaded.

  • defer поддерживается IE4 +, Firefox 3.5+, Chrome 2+,и Safari 4 +.
  • async поддерживается Firefox 3.6+, Chrome 7+ и Safari 5+.( Нет IE поддержка!)

defer - ваш лучший выбор.Скрипты загружают параллельно и исполняют синхронно (по порядку).Это также лучше поддерживается и более предсказуемо, чем async.(См. Также этот очень подробный анализ async / defer.)

<script defer type="text/javascript" src="script.js"></script>
2 голосов
/ 26 января 2010

Это уродливо, но вы можете заставить скрипты загружаться параллельно, вставляя элементы DOM ... используя javascript.

Проверьте этот блог для рабочего примера.

2 голосов
/ 26 января 2010

Это нормально для встроенных скриптов в HTML. Вы можете добавить сценарии динамически, используя следующий код:

<script type="text/javascript">
    var head  = document.getElementsByTagName("head")[0]; 
    var sTag1 = document.createElement("script");
    var sTag2 = document.createElement("script");
    sTag1.type = sTag2.type = "text/javascript";
    sTag1.src = "http://example.com/ex.js";
    sTag2.src = "http://google.com/google-maps.js";
    head.appendChild(sTag1);
    head.appendChild(sTag2);
</script>

Однако это может привести к неожиданным результатам - они могут не загружаться и анализироваться в правильном порядке, что важно, если сценарий 2 ссылается на переменные или функции из сценария 1.

Если вы просто хотите, чтобы ваш HTML загружался до загрузки скриптов, сохраняйте их последовательными и поместите их внизу вашего HTML-файла, а не в тег head. Это загрузит страницу перед загрузкой и анализом скрипта. Смотри http://developer.yahoo.net/blog/archives/2007/07/high_performanc_5.html.

0 голосов
/ 26 января 2010

Файлы JavaScript всегда будут загружаться в указанном порядке.

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