Основное отличие типов загрузки скриптов async и defer заключается в том, когда они выполняют скрипты: elbrusboot.camp
- Async. elbrusboot.camp Указывает браузеру загружать скрипт асинхронно, то есть параллельно с разбором HTML-документа. elbrusboot.camp Скрипты с этим атрибутом выполняются сразу после загрузки, без учёта порядка появления на странице или завершения разбора HTML. elbrusboot.camp
- Defer. elbrusboot.camp Указывает браузеру отложить выполнение скрипта до тех пор, пока не будет завершён разбор HTML-документа. elbrusboot.camp Это позволяет браузеру продолжать отображать содержимое страницы без задержек из-за ожидания скрипта. elbrusboot.camp Скрипты с этим атрибутом сохраняют порядок своего появления на странице и выполняются перед событием DOMContentLoaded. elbrusboot.camp
На практике defer используется для скриптов, которым требуется доступ ко всему DOM и/или важен их относительный порядок выполнения. learn.javascript.ru Async хорош для независимых скриптов, например счётчиков и рекламы, относительный порядок выполнения которых не играет роли. learn.javascript.ru