SEOFAQ Telegram, маркетинг и SEO Канал SEOFAQT в мессенджере Telegram

Все чатыРазличные способы загрузки JavaScript с помощью тегов...

 391  


Различные способы загрузки JavaScript с помощью тегов <script> в HTML

Оптимизация загрузки скриптов:

Различия между сценариями async и defer

defer - более старый, async - чуть более новый. Оба хорошо поддерживаются.

Интуитивная разница между async и defer заключается в том, что async имеет тенденцию выполняться раньше (им не нужно ждать разбора HTML и построения DOM, а также извлечения других скриптов).

"Стандартный" немодульный <script> (подразумевается type=text/javascript, нет async, нет defer)

❌ блокирует HTML-парсер

ℹ️ немедленно загружается, разбирается и выполняется, перед любыми последующими <script> в HTML

✔️ гарантирован порядок выполнения

❌ блокирует событие DOMContentLoaded

❌ учитывая вышеизложенное, не подходит для некритического кода, так как может привести к "единой точке отказа" и задержке запуска динамических веб-приложений

`defer` скрипты:

ℹ️ для inline (non-module) скриптов, defer игнорируется и не имеет эффекта (они выполняются немедленно)

💡 если вам действительно нужно, вы можете использовать base64 хак

ℹ️ для inline (module) скриптов, defer подразумевается (автоматически)

✔️ загружаются без блокировки HTML-парсера

✔️ гарантирован относительный порядок выполнения нескольких defer скриптов (если у всех есть src)

⚠️ однако, это баг в IE9-

ℹ️ выполняются после разбора DOM (но перед поднятием DOMContentLoaded)

❌ блокирует событие DOMContentLoaded (если скрипт не async defer)

async скрипты:

ℹ️ для inline (non-module) скриптов, async игнорируется и не имеет эффекта

ℹ️ для inline (module) скриптов, async поддерживается source - для выполнения вне очереди, как можно скорее

✔️ загружаются без блокировки HTML-парсера

⚠️ выполнение вне очереди; выполняются, как только доступны

⚠️ относительный порядок выполнения async скриптов не гарантирован (также относится к async, type=module скриптам)

⚠️ не ждут завершения разбора HTML; могут прервать построение DOM (особенно, если загружаются из кэша браузера)

⚠️ блокируют событие load (но не DOMContentLoaded)

⚠️ не поддерживаются в IE9-

async defer скрипты:

— интерпретируются как async; возврат к defer для древних браузерных движков, не поддерживающих async (IE9...)

Больше информации найдете тут:

https://gist.github.com/jakub-g/385ee6b41085303a53ad92c7c8afd7a6

@MikeBlazerX

Ссылки из поста:
https://t.me/MikeBlazerX

Источник новости https://t.me/mikeblazerx/3475...