Могу ли я использовать <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.