LoginSignup
10
7

More than 5 years have passed since last update.

スクリプトはhead内で完結したい派

Last updated at Posted at 2017-07-06

scriptタグのasync属性はスクリプトはhead内で完結したい派の自分にはありがたい限りの機能でした。

scriptはレンダリングの後方で処理した方がよいという事でbodyの最後で読み込んだり記述したりするという方法がありましたが、自分は見難いのが嫌いなので、頑なにheadタグ内に記述してきました。

html5ではscriptタグにasync属性を付けることでレンダリングと非同期に読み込むことができるそうです。
これを使うことで後方にスクリプトを記述する必要も無視して良さそうな感じに思えました。

とりあえず、すぐに使用するもの以外(イベント発火等の後で使用するもの)には基本asyncを付けておけば良さそうです。(コメント指摘により追記: 依存性のあるスクリプトやイベント時に読み込まれていない可能性のあるスクリプトはasyncは使うべきではないということです。)

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>SAMPLE</title>
<head>
<script src="moment.min.js" async></script>
<script src="underscore-min.js" async></script>
<script src="jquery-3.2.1.min.js"></script>
<script>
$(function(){
    var now = moment();
    console.log(now.toDate());
    console.log(_.min([10, 5, 100, 2, 1000]));
});
</script>
</head>
<body>
<div>BODY</div>
</body>
</html>

jqueryはすぐに使用するのでasyncを付けてしまうと

Uncaught ReferenceError: $ is not defined

となります。

defer属性はDOMContentLoadedの直前に読み込まれるという事でした。

10
7
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7