По этой ссылке вы найдете спецификации W3C о «отсрочке» и «асинхронности». Об этом говорят:
Если ни один атрибут не присутствует, то скрипт извлекается и выполняется немедленно, прежде чем пользовательский агент продолжит анализ страницы.
Если у вас есть, например, «script.js», то вы можете делать с ним следующие вещи:
- Загрузка file
- Извлечение файла из кэша
- "Чтение" его, потому что перед фактическим выполнением кода должен быть прочитан весь код в файле (иначе подъем невозможен)
- Выполнение кода
Если ни один атрибут не указан, то скрипт выбирается[/b] и выполняется немедленно
Я вижу «выбирается» как:
- Браузер может получить script.js из кеша
- Браузер может загрузить script.js
Правильно? Итак, они используют «выгружено», потому что если вы скажете «загружено», тогда это не включает в себя кеширование?
Я хочу обсудить случай без кэширования, поэтому в таком случае:
Если ни один атрибут не присутствует, то скрипт загружается и выполняется немедленно
Могу ли я сказать это? И если да, то у меня есть последний вопрос по этому поводу.
Современные браузеры оснащены сканерами предварительной загрузки, которые заранее сканируют файлы JavaScript для загрузки. Поэтому я подумал: возможно, сканер предварительной загрузки уже завершит загрузку js-файла до того, как «парсер HTML» достигнет тега сценария. Таким образом, «парсер HTML» может быть занят каким-то другим HTML-кодом, предшествующим тегу сценария, в то время как браузер уже завершает загрузку.
Это верно до сих пор? Я сам не уверен. Но если это правда, то я не понимаю спецификации W3C, потому что они говорят (если все вышеизложенное верно):
Если ни один из атрибутов отсутствует, то скрипт загружается и выполняется немедленно
Значит, «выполняется немедленно» после загрузки? Если вы находитесь в синхронной среде, то весь HTML-код перед этим тегом сценария должен находиться в DOM перед выполнением JavaScript.
Итак, если все это правда, то я не понимаю, почему они могут сказать: «выполнено немедленно»? Или сканер предварительной загрузки является чем-то неофициальным, поэтому W3C игнорирует это в своей документации. Значит, в этом случае спецификация W3C на самом деле верна только для старых браузеров?
Или может ли браузер получить скрипт из сканера предварительной загрузки, и это произойдет в тот момент, когда «парсер HTML» окажется в теге скрипта, может быть, мне нужно увидеть это вот так?
Или как мне это увидеть?
Подробнее здесь: https://stackoverflow.com/questions/470 ... -and-async
Мобильная версия