悩めるWEB担当者様のための最新ノウハウをお届け

JavaScriptの読み込み方を工夫することで、表示を高速化しよう!

表示高速化するときにJavaScriptの最適化しようとは誰でも思います。
ですが、結局どうすればよいかわからなくなってしまっているのでないでしょうか。

もちろんJavaScriptの読み込みの最適化といってもいろんな観点があるかと思います。
当記事では表示高速化の観点から大まかな方針を示したいと思います。

なお、async等を用いた非同期処理、未使用のJavaScriptの削除、処理のロジックを見直すなどすれば、JavaScript自体も高速化が可能です。

ただ、当記事はあくまで読み込み方の話なので、この辺は割愛します。

本記事では、Webサイトの表示高速化を目的としたJavaScriptの最適な読み込み方法について解説しています。

  • JavaScriptの読み込みには「シンプル」「async」「defer」「インライン」の4種類があり、それぞれ処理のタイミングが異なる。
  • 基本はdeferによる非同期読み込みを推奨。HTML解析を止めず効率的に実行できる。
  • トラッキングなど一部のスクリプトではasyncが適しており、読み込み完了後すぐに実行される。
  • ファーストビューなど即時実行が必要な箇所は、シンプルまたはインライン読み込みを使う。
  • 読み込み位置は基本的に<head>内が最適で、非同期設定により全体の読み込み速度を向上できる。

【今だけ無料】PageSpeed Insightsを100ページ一括自動診断!

「トップページは改善したが、下層ページは放置気味…」「1ページずつ手動で計測するのは手間がかかる…」
そんなお悩みを解決!最大100ページを自動で計測し、修正優先度付きのレポートを無料で作成します。サイト全体の「健康状態」を把握したい方は、今すぐお申し込みください。

読み込み方一覧

まず、そもそもの読み込み方ですが、当記事では主に4種類にわけたいと思います。

1,シンプルな読み込み

ここでは便宜上シンプルな読み込みと表現しましたが、要するに一番単純な読み込み型です。

<script src= “./something.js” ></script>

詳細はおそらく知っていると思いますし、調べるとすぐ出てくるので割愛しますが、上記のようにパスを指定して読み込みます。

当記事ではシンプルな読み込みと表記します。
文字通り一番単純な読み込みであるからです。

2,async

上記のコードにasync属性を付与すると、非同期で読み込みができます。

<script type='text/javascript' async src='./something.js' ></script>

asyncを付与することで、JavaScriptをバックグラウンドで読み込むことができます。
非同期読み込みの何が良いのかというと、HTMLの処理を継続したままにできます。
これが通常の読み込みだと、<script>タグの位置で、HTMLの処理を一旦ストップして、JavaScriptを読み込みます。

処理がストップしない分、表示高速化につながります。

asyncの場合、読み込みが終了した時点でJavaScriptが実行されます。その実行の間はHTMLの処理がストップするので注意です。

3,defer

asyncだけでなくdeferを使うことでも、非同期で読み込めます。

<script type='text/javascript' defer src='./something.js' ></script>

asyncと同じくバックグラウンドで読み込むことで、その間はHTMLの処理がストップせず、高速化につながります。
asyncとの違いは、JavaScriptを読み込んだ後の振る舞いにあります。
asyncは読み込みが完了するとすぐ実行されますが、deferはそうではありません。
読み込みが終わっても、そのタイミングでは実行せず、HTMLの処理が終了しDOMが構築された後、DOMContentLoadedの直前のタイミングで実行されます。

4,インライン

インラインとはそのままを用いてHTMLにJavaScriptのコードを直接記述する方法です。

<script type='text/javascript'>
     //何かしらのJavaScriptを記述
</script>

前述した3つの読み込み方ではJavaScriptの記述が書かれたファイルが別にあるので、それを読み込みに行きますが、インラインだとその必要がないので、その分処理が少なくて済みます。

なお、インラインの場合、<script>タグにasyncやdeferを用いても実行されないので注意してください。基本的に同期的に読み込まれるため、HTMLの処理がストップし、全体の読み込みは遅くなってしまいます。

では、どう読み込めばよいのか。

読み込み方には複数種類がありますが、ではサイトの表示高速化のためにはどの読み込み方をすればよいのでしょうか。
大まかにはなりますが、基本的には下記の方針がオススメです。

  • 基本はdeferで読み込み
  • 特別な場合はasyncを使う
  • インライン、シンプルな読み込みは基本ファーストビューかライブラリの読み込みに使う

1つ1つ解説していきます。

基本はdefer

さて、asyncとdeferによる非同期で読み込みです。どちらを使うか迷うかもしれませんが、基本deferです。

まず非同期で読み込むのは、HTMLの解析処理を止めないためです。HTMLを処理しつつ、バックグラウンドでJavaScriptを読み込むことで全体として速く読み込みを終えることができます。

asyncはHTML構築中に実行される可能性があるので、deferにしてDOMcontentLoadedの直前に実行させるのがよいでしょう。asyncも悪くはないですが、deferの方がより良いでしょう。

特別な場合はasyncを使う。

非同期読み込みの場合、基本はdeferですが、全てのパターンをカバーしきれるわけでなく、asyncを使った方がよい場合もあります。

抽象的な言い方になりますが、サードパーティースクリプト、何かをトラッキングする類のJavaScript、DOM(HTML)の一部の箇所に適応されるJavaScriptに対して使うと良いです。

例えば、Google Adsenseのタグでも

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

などの読み込み方が紹介されています。

引用元:https://developers.google.com/publisher-ads-audits/reference/audits/async-ad-tags?hl=ja

非同期で読み込みながらも早めに実行させたい場合がこれに当てはまります。

なお、非同期で読み込むとうまく機能しなくなるものもあるのでそれは注意です。

一度asyncで読み込めるか検討してみるとよいでしょう。

シンプル、インラインはファーストビューで使う。

まず、シンプルな読み込みは使用しない方向でよいかと思います。非同期でない読み込み方はHTMLの解析をストップさせるため、全体の読み込みが遅くなってしまうからです。

とはいえ、そのデメリットを許容してもインラインやシンプルなやり方でJavaScriptを読み込んでもいい箇所があって、それはファーストビューです。

ファーストビューとはサイトにアクセスした際に最初に表示される部分です。
ファーストビューに関してはいち早くJavaScriptを実行させることで、LCPの向上に繋がる場合があります。

正直ここもasyncを使う方が個人的にはオススメです。
ここをシンプルな読み込みかインラインで読む場合、どちらにするかは、制作物や管理方法などで分かれると思います。

LPなどならインラインで良いかと思いますが、
ファイルを別にすると管理がしやすいので、
そのメリットを取る場合はシンプルな読み込みを使ってもよいでしょう。

同期

  • 外部に読みにいかない(インライン)
  • 他の処理をストップするので、jsの読み込み自体はいくらか速くなる可能性がある。

非同期

  • ファーストビューはともかく、全体はこちらの方が速い。

どちらのメリットをとるのか判断が難しいですが、
個人的には非同期(async)が良いかと思います。

読み込み位置について

さて、ここでは読み込み位置について軽くコメントしておこうと思います。

よく言われるのはheadの中で読むか、の直前で読むか、という話がありますね。
もちろんそれ以外の選択肢もあるかと思いますが、基本的にはこの2択で議論されることが多いです。

実はここまでの話を全て満たせるのなら、JavaScriptをわざわざ</body>の直前に置く必要はなくなります。

むしろ、<head>の中に置く方が良いかと思います。
なぜなら特別な場合を除き、非同期で読み込むことになるので、先に読み込んで置いた方が速く読み込みが終わります。特別な場合もファーストビュー等なので、それらの後にJavaScriptを置くことになり、</body>の前に置くと単に読み込みの開始が遅くなるだけなので、読み込み完了が遅くなってしまう可能性があります。

様々なパターン

と、ここまでいろいろ述べてきましたが、これらはあくまで一例です。

例外パターンや、実はどちらでもよいパターンなどなどもあります。
JavaScriptの中身、働きかけるDOM(HTML)によっても最適解が変わってくるので、本当にどこまでも細かく調整することができます。

また、ライブラリに関してもいくつかパターンが考えられます。deferで読み込んだ方がパターンもありますし、シンプルに読みこんでしまった方が良いパターンもあります。

いろいろシミュレーションしてみると、結構複雑なパターンに分かれるので、なかなか難しいです。

まとめ

今回は筆者の見解をもとに、JavaScriptの読み込み方法の最適解についてまとめてみました。
よくわからない部分も多いかと思います。

ただPageSpeed Insightsのスコアも、100点はとれなくとも、80点をとれれば、正直それで十分なので、気楽に取り組むのがよいかもしれません。

この業界は非常に変化が速いです。
JavaScriptやブラウザも常にアップデートが進んでいくので、最適解はまた変わっていくかと思います。
変わっていくたびにこの記事や新規記事でまとめられたらよいなと思います。
参考になれば幸いです。

当サイトではこの他にもWebに関するお役立ち情報を多数ご紹介しています。
Web担当者の方、デジタルマーケティングに興味がある方はぜひご覧ください。

数時間の作業を一瞬で!PageSpeed Insights最大100ページを一括診断!

PageSpeed Insightsを手動でチェックすると、3〜5分程度かかってしまいます。
一定規模、以上のWebサイトで全ページをチェックしようとすると、数時間以上のリソースが必要になります。

デジタルアイデンティティでは、「トップページ以外の速度状況がわからない」「ページ数が多くて管理しきれない」という企業様向けに、PageSpeed Insightsで最大100ページをまとめて計測する「サイトスピード一括診断ツール」を提供しています。

WebサイトのURLを入力するだけで、モバイル・PC両方のスコアやCore Web Vitals指標を全自動で取得。単なるスコアだけでなく、「どのページから直すべきか」がわかる修正優先度リストや、SEOリスクの可視化レポート(PDF・Excel)を無料で納品します。

こんなお悩み、ありませんか?

  • 1ページずつPSIで計測するのが面倒で放置している…
  • トップページは早いが、記事や商品ページの速度が不安…
  • どのページが足を引っ張っているのか特定できない…
  • 社内報告用にサイト全体のパフォーマンスを数値化したい…
  • 改善インパクトの大きいページから効率よく対策したい…

「点」ではなく「面」でサイトの課題を把握し、ユーザー体験とSEO評価を底上げしましょう。
サービスリリース記念で今だけ無料で診断いたします!

【今だけ無料】一括診断に申し込む

関連記事