определение
defer:此布尔属性被设置为向浏览器指示脚本在文档被解析后执行。
async:设置此布尔属性,以指示浏览器如果可能的话,应异步执行脚本。
-
Для отсрочки мы можем думать, что js внешней цепочки размещены внизу страницы. Загрузка js не будет блокировать рендеринг страницы и загрузку ресурсов. Однако defer будет выполняться в порядке исходного js, поэтому, если есть зависимости до и после js, вы можете уверенно его использовать.
-
Для асинхронности это новый атрибут в html5, его функция — загружать и выполнять скрипты асинхронно, не блокируя загрузку страницы из-за загрузки скриптов. После загрузки он будет выполнен немедленно.В случае асинхронного js будет выполняться сразу после загрузки, поэтому очень вероятно, что он не будет выполняться в исходном порядке. Если js до и послезависимый, с асинхронностью вполне возможноошибка.
разница
Тот же пункт:
- Не блокировать отрисовку страницы при загрузке файлов
- Недействительно для встроенного скрипта (внутренний скрипт)
- Метод document.write нельзя вызывать в сценариях, использующих эти два свойства.
- Существует обратный вызов события onload скрипта
разница:
- HTML-версия html4.0 определяет отсрочку, html5.0 определяет асинхронность.
- Совместимость с браузером
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| async attribute | (Supported) | 3.6 (1.9.2) | 10 | — | (Supported) |
| defer attribute | (Supported) | 3.5 (1.9.1) | 4 | — | (Supported) |
- время исполнения
Каждый сценарий асинхронного атрибута выполняется сразу после его загрузки и будетПеред событием загрузки окнавоплощать в жизнь. Таким образом, возможно, что порядок выполнения сценария будет нарушен; каждый сценарий атрибута отсрочки выполняется в исходном порядке после анализа страницы и будет выполняться до DOMContentLoaded документа.
Эпилог
Проще говоря, есть три возможных случая использования этих двух свойств.
- Если async имеет значение true, скрипт выполняется асинхронно после завершения загрузки.
- Если async имеет значение false, а defer — true, скрипт будет выполнен после анализа страницы.
- Если и async, и defer равны false, скрипт остановит анализ страницы во время анализа страницы, загрузит и немедленно выполнит его.
Наконец, я дам несколько личных советов: используете ли вы атрибуты отсрочки или асинхронности, вам нужно сначала организовать файлы js на странице, какие файлы имеют зависимости, какие файлы могут загружаться с задержкой и т. д., и хорошо поработать над этим. объединяя и разбирая точки кода js, а затем используйте эти два свойства в соответствии с потребностями страницы.