Могу ли я использовать <script defer> безопасно сейчас?
Из того, что я читаю, атрибут defer
на <script>
теперь широко поддерживается, но я никогда не видел, чтобы он использовался или упоминается.
Если вам не нужно откладывать встроенные скрипты и динамически не добавлять сценарии (которые вызывают проблемы в IE9- и Safari 4 -), кажется, что вы можете использовать его надежно и скрипты выполняются прямо перед DOMContentLoaded в указанном порядке ( что не происходит с async
)
Это в основном то, что нужно большинству веб-сайтов: запустить несколько или несколько внешних скриптов в последовательности, на DOMready. Например:
<script defer src='jquery.js'></script>
<script defer src='jquery.some-plugin.js'></script>
<script defer src='my-scripts.js'></script>
Почему он не широко используется? Могу ли я использовать его сейчас?
Ответы
Ответ 1
Я сделал немного больше исследований, и я обнаружил, что проблемы с defer
не останавливаются на встроенных сценариях и сценариях, добавленных динамически в IE9. Там длинный список проблем и несоответствий с различными браузерами на HTML5 Boilerplate GitHub https://github.com/h5bp/lazyweb-requests/issues/42
Мне так стыдно, что я должен был попробовать улучшить defer
вместо того, чтобы работать над сомнительным async
(сомнительным, потому что это полезно, только если скрипты не зависят друг от друга, что редко встречается я)
Ответ 2
Вы спрашиваете:
вы можете надежно использовать defer
и запустить скрипты прямо перед DOMContentLoaded в указанном порядке
К сожалению, я не вижу никаких спецификаций или стандартов в любом месте, которые говорят, что сценарии defer
должны исполняться по порядку, поэтому я не думаю, что вы можете положиться на это в любом браузере. Спецификации просто говорят, что сценарии defer
должны выполняться после загрузки DOM.