Ответ
Есть несколько способов указать браузеру, что скрипт будет использоваться позже:
defer- откладывает выполнение до полной загрузки DOM, сохраняя порядок скриптов:
<script src="script.js" defer></script>
async- загружает скрипт асинхронно и выполняет сразу после загрузки, без гарантии порядка:
<script src="script.js" async></script>
- Динамическое создание скрипта:
const script = document.createElement('script');
script.src = 'script.js';
document.body.appendChild(script);
type="module"- для ES6 модулей (по умолчанию ведут себя как defer):
<script type="module" src="module.js"></script>
Для критически важных скриптов лучше использовать defer, для независимых - async. Динамическая загрузка дает полный контроль над моментом выполнения.