У меня есть некоторая путаница вокруг нового асинхронного атрибута с элементом script в HTML5, и я надеюсь, что кто-то может дать четкий ответ.
Браузеры способны к параллельным соединениям, поэтому изображения будут загружаться параллельно. Но любой внешний javascript не загружается параллельно с другими внешними javascript и изображениями. Скрипты блокируют загрузку страницы до тех пор, пока они не будут загружены и не выполнены.
Чтобы загрузить script, не блокируя остальную загрузку страницы, наиболее распространенным методом является создание элемента script, например, фрагмента Google Analytics:
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.src = '...ga.js';
ga.async = true;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
Я не уверен, как это работает точно - либо
- браузер анализирует и отображает страницу, а затем, как только он закончил, он замечает, что DOM изменился, в результате чего загружается и выполняется ga.js script
или
- браузер начинает загрузку javascript параллельно с другими ресурсами.
Я думаю, что это последний.
Новый асинхронный фрагмент Google Analytics включает атрибут асинхронного HTML5 в созданном им элементе script. Это не поможет проблему блокировки страницы, которая уже была решена методом "Script DOM Element". Итак, что добавляет асинхронное изображение? Согласно w3schools, "если присутствует async, script выполняется асинхронно с остальной частью страницы (script будет выполнен, пока страница продолжит разбор)".
И, согласно сайту Стива Судерса, "основное преимущество этого [асинхронного атрибута] заключается в том, что он сообщает браузеру, что последующие скрипты могут быть выполнены немедленно - им не нужно ждать ga.js".
Итак, как асинхронный и script метод элементов DOM обе решают одну и ту же проблему?
Спасибо.