Я пытаюсь оптимизировать свои страницы, помещая некоторые атрибуты async
в мои скрипты. Кажется, он разбивает мой javascript, так как $(document).ready
выполняется до загрузки всех скриптов!
Я видел, что могу решить проблему, поставив $(window).load
вместо $(document).ready
, но мне было интересно, есть ли лучшее решение.
Это решение вызывает в моем случае 2 проблемы:
$(document).ready
и сообщить всем разработчикам, чтобы он больше не использовал егоЕсть ли у вас какие-то волшебные трюки? Может, положить все сценарии в конец? используйте defer
вместо async
?
После некоторых обширных исследований я могу определенно сказать, что создание сценариев в конце страницы - лучшая практика.
Yahoo соглашается со мной: http://developer.yahoo.com/performance/rules.html#js_bottom
Google не говорит об этой практике и предпочитает асинхронные скрипты: https://developers.google.com/speed/docs/best-practices/rtt#PreferAsyncResources
IMHO, размещение script в конце страницы имеет несколько преимуществ по сравнению с async/defer:
$(document).ready
или $(window).load
Единственный недостаток, который я вижу, заключается в том, что браузер не сможет распараллелить загрузку. Одной из веских причин использовать async/defer вместо этого является то, что у вас есть script, который полностью независим (не нужно полагаться на порядок выполнения) и который не нужно выполнять в определенный момент времени. Пример: аналитика google.
$(document).ready(function () {console.log('READY');});