Что такое динамическое создание элемента скрипт с помощью JavaScript
Существует множество причин, по которым вам может понадобиться динамическое создание элемента скрипт в HTML разметке сайта. Это можно сделать с помощью PHP или JavaScript. Мы рассмотрим динамическое создание элемента скрипт с помощью JavaScript <script> и вставить в разметку страницы вашего сайта со стороны клиента.
Применим для этого метод document.createElement().
С помощью этого метода можно создать новый элемент и добавить атрибут src к ссылке на файл который мы хотим загрузить.
Наконец мы можем вставить созданный элемент в HTML-страницу с помощью document.head или document.body.
Например вам надо создать скрипт и добавить его внутри тега head на HTML-странице. Код будет выглядеть примерно так:
const script = document.createElement('script');
script.src = 'https://example.com/script.js';
document.head.appendChild(script);
В строке script.src вставьте название вашего файла и путь к нему.
Созданный скрипт будет добавлен перед закрывающим тегом head и выглядеть он будет так:
<script src="https://example.com/script.js"></script>
Как оказалось — это очень просто.
Асинхронная загрузка для созданного скрипта.
Атрибут async позволяет загружать скрипт асинхронно, не блокируя выполнение основной страницы. Как например этого требует Google PageSpeed Insights. Для этого необходимо добавить в код правило для создания атрибута async.
В итоге код будет выглядеть так:
const script = document.createElement('script');
script.src = 'https://example.com/script.js';
script.async = true;
document.head.appendChild(script);
Подобный подход полезен для загрузки дополнительных библиотек или выполнения кода на основании пользовательских действий. Это повышает производительность и адаптивность приложения, минимизируя начальное время загрузки.
Естественно, вам захочется использовать какое-то обнаружение загрузки документа, чтобы убедиться, что документ действительно загружен, прежде чем инициировать динамическую инъекцию.
Вы также можете задать innerHTML для созданного элемента <script> вместо использования src на внешний файл. Это позволяет динамически вставлять элементарный код JavaScript внутри тега head вашей страницы.
const script = document.createElement('script');
script.innerHTML = "console.log('test')";
document.head.appendChild(script);
Это создаст элемент внутри тега заголовка вашей страницы head и который будет запущен немедленно.
Выглядеть он будет так:
<script>
console.log('test');
</script>
И в коде HTML страницы так:

И в консоли панели разработчика (F12) так:

Создание элемента скрипт поможет также в решении вопроса отложенной загрузки скриптов Google Аналитики, которые как известно очень влияют на показатели загрузки страницы в Google PageSpeed Insights.
Как решить этот вопрос, ну во всяком случае я его решил на своём сайте, опишу в соответствующей статье.
Используйте динамическое добавление скриптов с умом, чтобы избежать конфликтов и повысить пользовательский опыт.
Отлично всё описано, спасибо. Не могли бы уточнить как сделать отложенную загрузку скрипта GTM в хедере? Чтобы не влияли на показатели Гугл пэйдж спид?!
Пожалуйста. Скоро будет.