Примитивный пример: Есть скрипт с алертом, подключенный вот так <script src="js.js" defer></script> с defer. При обновлении сперва появляется алерт и только потом контент страницы. Почему так ведь defer подразумевает сперва загружать содержимое страницы и только потом скрипт?
Скрипт с атрибутом defer выполняется не после отрисовки контента, а после окончания парсинга HTML, построения DOM и CSSOM. Ваш алёрт появляется потому, что к моменту его исполнения эти необходимые условия выполнены. Первый пэинт страницы происходит уже после.
defer нужен для того, чтобы не блокировать парсинг HTML и чтобы несколько идущих подряд скриптов выполнились в указанном порядке.
Вот вам пара статей на изучение: https://bitsofco.de/async-vs-defer/, https://bitsofco.de/understanding-the-critical-rendering-path/
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости