SEARCH

CATEGORY

JavaScript入門:DOMContentLoadedとloadの違い・実行タイミングと使い分け

WebページでJavaScriptを実行する際、「いつ処理を開始するか」は非常に重要です。

その代表的なイベントが DOMContentLoadedload です。

この記事では、それぞれの違い・実行タイミング・使い分けを、初心者にも分かりやすく解説します。

DOMContentLoadedとは

DOMContentLoaded は、HTMLの読み込みと構造の解析が完了した時点(=DOMが構築されたタイミング)で発火するイベントです。

画像やCSSなどの外部リソースの読み込みを待たないため、比較的早いタイミングで処理を実行できます。

ポイント

  • HTMLの読み込みと構造の解析完了時に実行される
  • 画像・CSSの読み込みは待たない
  • 初期化処理に適している

loadとは

load は、ページ内のすべてのリソース(画像・CSS・JSなど)の読み込み完了後に発火するイベントです。

ページが完全に表示された後に処理を実行したい場合に使用します。

ポイント

  • 全リソースの読み込み完了後に実行される
  • DOMContentLoadedより遅い
  • 画像サイズの取得などに適している

DOMContentLoaded と load の違い

主な違いは「実行タイミング」です。

項目DOMContentLoadedload
実行タイミングHTMLの読み込みと構造の解析完了時全リソース読み込み完了後
実行速度早い遅い
画像・CSS待たない待つ
主な用途初期化処理完全表示後の処理

使い分けの目安

  • HTMLだけで十分:DOMContentLoaded
  • 画像なども含めて扱う:load

使い分けのポイント

基本的には DOMContentLoaded を使うケースが多いです。

DOMContentLoadedを使う場面

  • DOM操作(要素取得・イベント付与)
  • 初期表示の制御
  • フォーム処理

■ loadを使う場面

  • 画像サイズを取得したい
  • レイアウト計算が必要
  • 完全描画後に処理したい

迷った場合は、まず DOMContentLoaded を選び、必要に応じて load を使い分けると安心です。

よくある注意点

■ スクリプトの読み込み位置

<script> を body の最後に書く場合、すでにDOMが構築されているため、イベントが不要なケースもあります。

この場合、DOMContentLoadedを使わなくても問題なく動作することがあります。

■ defer属性を使う方法

<script>defer を付けると、HTMLの解析と並行してスクリプトを読み込み、DOM構築完了後(DOMContentLoadedとほぼ同じタイミング)に実行されます。

  • HTML解析をブロックしない
  • DOMContentLoadedと同等のタイミングで実行される
  • 現在の主流の書き方

そのため、DOMContentLoadedを使わずに実装できるケースも多いです。

■ DOMContentLoadedが発火しないケース

スクリプトの実行タイミングによっては、すでにイベントが終了していることがあります。

その場合は、以下のように分岐すると安全です。

まとめ

  • DOMContentLoaded:HTMLの読み込みと構造の解析完了時(高速・基本はこちら)
  • load:全リソース読み込み完了後(画像などが必要な場合)