30secondsofinterviews.org
30 seconds of interviewsを一通り読んで面白かったので紹介していきたい
What are defer
and async
attributes on a <script>
tag?
<script src="myscript.js"></script>
<script src="myscript.js" defer></script>
<script src="myscript.js" async></script>
いずれの属性も指定しない場合、スクリプトは同期的にダウンロード・実行され、ドキュメントのパースはスクリプトの実行が終了するまで中断される。スクリプトは順番に実行される
defer
属性はドキュメントのパース中にスクリプトをダウンロードする。DOMContentLoadedイベントリスナ内のスクリプト実行と同様に、ドキュメントのパース完了後に実行される。defer
スクリプトは順番に実行される。
async
属性はドキュメントのパース中にスクリプトをダウンロードする。パースが完全に終了する前に、スクリプトを実行する。async
スクリプトは必ずしも順番に実行されない。
tips
- スクリプトが互いに依存している場合は、
defer
を使用する。
- スクリプトが独立している場合は、
async
を使用する。
- DOMが必ず準備されていなければならない、かつ実行するスクリプトがDOMContentLoaded内に置かれていない場合、
defer
を使用する。