У меня есть следующий код в части моего html, и мне было интересно, как я могу его очистить, чтобы оптимизировать загрузку.
<script type="text/javascript">
function downloadJSAtOnload() {
var element = document.createElement("script");
element.src = "js/jquery.orbit-1.2.3.min.js";
document.body.appendChild(element);
}
function downloadJSAtOnload() {
var element = document.createElement("script");
element.src = "http://code.jquery.com/jquery-latest.min.js";
document.body.appendChild(element);
}
if (window.addEventListener)
window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)
window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
</script>
Если ваша цель - разрешить отображение страницы перед загрузкой скриптов, гораздо проще: просто поместите теги сценария (в соответствующем порядке) в самом конце body
, непосредственно перед закрытием </body>
тег:
<!-- ...content of page... -->
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="js/jquery.orbit-1.2.3.min.js"></script>
</body>
</html>
Событие load
на window
объекте происходит очень поздно в процессе загрузки страницы, после того как все остальные ресурсы были полностью загружены (или не загружены). Таким образом, все изображения, как на переднем плане, так и на заднем плане, и т.д.
Поместив скрипты прямо в конец тела, вы получите их в очереди загрузки браузера в разумные сроки, но не заставляя браузер ждать появления сценария перед выполнением первоначальной рендеринга страницы. Вы также можете получить заказ (вы получите, что с defer
атрибута на script
элемента, а также, но не все браузеры поддерживают). Подробнее: Лучшие практики YUI для ускорения вашего сайта
Вы спросили в комментариях, когда вы будете использовать событие load
для загрузки скриптов. Мой ответ: у меня никогда не было причин для этого.
downloadJSAtOnload
(вторая). Также обратите внимание, что в современных браузерах, если бы вы дали этим функциям разные имена и вызывали их оба, не было бы никакой гарантии, что jQuery будет загружен перед подключаемым модулем Orbit (что, вероятно, приведет к сбою подключаемого модуля Orbit). ). У тебя было бы состояние гонки.body
, перед закрытием</body>
тег.