См.: https://developers.google.com/maps/documentation/javascript/tutorial< /а>
Google использует здесь:
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script>
</body>
</html>
Мой вопрос: почему Google использует «отложить», потому что, по моему мнению, он ничего не делает в приведенном выше сценарии?
Давайте сравним это (1):
<script src="script.js" defer></script>
</body>
</html>
С этим (2):
<script src="script.js"></script>
</body>
</html>
Единственное отличие состоит в том, что при выполнении «script.js» в случае: (1) вы будете уверены, что «конец тега body» и «конец тега html» еще не находятся в DOM. В случае (1) эти теги уже находятся в DOM при выполнении «script.js». Но конец тега body / html ничего не изменит на вашем экране (рендеринг), поэтому эти теги фактически не влияют на «рендеринг». Таким образом, теоретически между этими двумя примерами есть небольшая разница, но на практике разницы нет вообще.
Итак, что может быть причиной использования отсрочки? Вернемся в историю. Если бы вы использовали в старых браузерах:
<script src="script.js"></script>
</body>
</html>
Проблема заключалась в том, что у вас не было «сканеров предварительной загрузки». Они могут сканировать документ (параллельно), искать загрузки для начала уже. Старый браузер впервые увидит «script.js», когда «анализатор HTML» достигнет этой части документа. Это довольно поздно, чтобы начать загрузку и пустая трата времени. Вот почему они придумали «отложить», чтобы вы могли разместить тег скрипта в начале документа, но выполнение происходило бы, когда парсер html будет делать со всем документом (чтобы он не блокировал парсер html ).
Для более новых браузеров «отложить» в любом случае не имеет смысла, потому что вы можете просто использовать «тег сценария синхронизации» непосредственно перед концом страницы. «Сканер предварительной загрузки» начнет загрузку почти сразу. И поскольку вы размещаете его в конце документа, выполнение скрипта не будет блокировать анализатор html (за исключением end body/html, но эти теги в любом случае не будут влиять на рендеринг).
Таким образом, «отложить» только добавляет некоторые функции в старые браузеры, потому что в более новых браузерах вы можете просто использовать «тег скрипта синхронизации» в конце документа.
Но отсрочка в старых браузерах будет иметь смысл только в том случае, если вы поместите тег скрипта в начало документа, а не в конец документа. Если вы поместите «отложить» в конец документа, то в любом случае браузеру придется долго ждать, прежде чем он сможет начать загрузку.
Итак, я говорю: «отложить» на практике не имеет значения, если вы поместите его в тег скрипта непосредственно перед концом документа. Это имело бы смысл только в том случае, если бы вы поместили его в тег скрипта в начале документа.
Так что мне кажется, что Google не очень понимает значение слова «отложить», потому что зачем им его добавлять? Это ничего не делает. Или это неправильное мнение обо мне?
Это еще несколько вопросов/сообщений от меня, где у меня все равно есть сомнения относительно того, что Google говорит о рендеринге и использовании отсрочки/асинхронности и так далее:
Google ошибается насчет отсрочки?
Почему браузер не всегда завершаете рендеринг предшествующего HTML перед выполнением javascript?
Последствия javascript могут иметь document.write в коде?
Динамически создаваемые скрипты не блокируют рендеринг?
Загрузка внешнего javascript через асинхронный скрипт тег в конце веб-страницы
Вот почему я хотел проверить, как Google создает свои собственные скрипты, и после одного поиска в Google я уже нашел этот пример со странным для меня использованием «отложить».
В любом случае, может быть причина для его использования, но Google не может указать правильную причину. В документации Google рассказывает историю, которую я рассказывал вам в этом посте/вопросе. Но это не причина использовать "отсрочку" таким образом.
Я знаю, что разные браузеры по-разному обрабатывают «отложить», поэтому, возможно, именно поэтому Google использует его. Но тогда их документация не дает правильных причин. И тогда мой вопрос в том, что это за причина?
Так кто знает об этом больше? Или "отсрочка" действительно ни к чему в скрипте гугла?