JavaScript Execution Order
※ asyncとdefer&asyncを別々のページでデモする理由は、一緒に混ぜるとscriptタグの数が、
ブラウザが同時にロードできるリソースの数を超えてしまい、妙なところでポーズしてしまうから。
複数のnormal間では、ソースに記述された順番に実行される。
ロードが完了した時刻は無関係である。
複数のdefer間では、ソースに記述された順番に実行される。
ロードが完了した時刻は無関係である。
deferのJavaScriptはすでにロードされていたとしても、
すべてのnormalのJavaScriptの実行が完了されるまで、
deferは実行されない。
すべてのdeferのJavaScriptの実行が完了されるまで、
"DOMContentLoaded"は実行されない。
asyncのJavaScriptは実行するのに、他のJavaScript(他のasyncも含む)の実行を
待ちもしないし、待たせもしない。完全に独立している。
insertのJavaScriptは実行するのに、他のJavaScript(他のasyncも含む)の実行を
待ちもしないし、待たせもしない。完全に独立している。
asyncやinsertのJavaScriptがまだ実行されていないのに、そのJavaScriptタグを削除してしまうと、
JavaScriptの実行がキャンセルされてしまうのではないかという気がするが、そのようなことはない。
asyncのJavaScriptのタグがブラウザに読まれた時点で、その実行がいつか来るということは
スケジュールされる。JavaScriptのタグが削除されても、そのスケジュールに変更はない。
もしdeferとasyncの両方をJavaScriptタグに適用した場合、asyncとして動作する。