PageSpeed Insightsで色々なサイトを計測していると、度々見かける「過大な DOM サイズの回避」の警告。

何となくクリアする方法は分かるけど・・・。

DOMってなんやねん!

っということで、理解を深めるためにも調べてみました。

WordPressでどう対策すればいいかも考えたよ☆

DOMとは

イメージ的にはhtmlタグの階層とか深さのことだと思います。

DOMツリーっていうのもよく見かけるけど、Google Chromeのデベロッパーツールで

こういう「▼」で閉じたり開いたりするやつっしょ。

デベロッパーツールはCSSをいじる時にチェックすることが多いけど、見やすくて便利なので愛用してます(*´ω`*)

PageSpeed Insightsの詳細のリンク先を読むと「ノード」っていう言葉も出てくるけど、ノードについて一番分かりやすかったのは以下のサイトです。

https://wa3.i-3-i.info/word1300.htm

ま、ノードは言い換えればhtmlタグの要素って思ってればOKかな!?

「過大なDOMサイズの回避」の詳細

PageSpeed Insightsでの「過大な DOM サイズの回避」の詳細には以下のようにあります。

ブラウザ エンジニアは、ページに含まれる DOM の要素数が 1,500 個を超えないようにすることを推奨しています。ツリーの深さは 32 要素まで、子や親の要素数は 60 個までにするのが最適です。DOM サイズが大きいと、メモリの使用量が増え、スタイルの計算に時間がかかり、レイアウトのリフローというコストが発生する可能性があります。

DOMの要素数1500個以内っていうのは、htmlタグが1500個を超えないようにするのが良いってことなんだね。

ツリーの深さ32要素っていうのは、デベロッパーツールでいう「▼」で開くやつが最大で32回になるとダメ。

子や親の要素数は60個 までっていうのは、例えばリストタグ<ul>を親要素とすると、子要素<li>が60個までじゃないとダメ。

っていうことか。

意外と余裕でクリアできそうだけど・・・。

上限はあくまで上限であり、目安である

実はこの上限に達していなくても警告されますorz

具体的にいくつなら警告されないか試してみたところ、恐らく850くらいです。

▼873件の要素はオレンジ

▼815件の要素はグリーン

上記の差から、そう思いました。

CSSでデザインを組んでいるとついつい<div>や<span>で何十にも囲いたくなるけど、やり過ぎないように注意しよう。

PageSpeed Insightsは教えてくれる

どこが一番深くて、どこの子要素が一番多いかを。

「過大な DOM サイズの回避」をクリックして開くと次のようなものが出てきます。

この表の通りなんだけど、

  • 合計DOM要素数が873件
  • DOMの一番深いところは<span>
  • 子要素が一番多いところは<select>内

っていうのが読み取れます。

この例はWordPressのテストデータを使っています。

<select>タグ内の子要素が多いって言われてるけど、テストデータだとカテゴリーがめちゃめちゃ使われているんだよね。

それを「カテゴリー」ウィジェットで表示させたところです。

カテゴリの作り過ぎはユーザビリティも良くないし、うまく整理・うまく表示させる仕組みが欲しいね。

WordPressで「過大なDOMサイズの回避」を回避するには?

ここまで見てきて考えられることは、

  • DOMの少ないテーマを使用する
  • 子要素を入れ込み過ぎない

一般的にはこの2点。

テーマをカスタマイズする人なら、

  • 装飾の時にhtmlタグで深く囲い過ぎない

ってこともかな。

DOMの少ないテーマを使用するには?

テーマのデモサイトをPageSpeed Insightsにかけて、「過大なDOMサイズの回避」の項目をチェック。

警告が出ていなくても、「合格した監査」の方から見てみよう。

件数が少なければ少ないほどいいね。

記事を書く時はDOMの制限とか気にしたくないでしょ?

そうするとテーマ側で余裕でクリアしていることが望ましいと思う。

子要素を入れ込み過ぎないようにするには?

やりがちなのはサイドバーやフッターでのカテゴリ一覧とかアーカイブだと思う。

ズラズラと長いリストになる場合は、子カテゴリ―で仕訳けて表示したり、アーカイブもプラグインとかでうまく整理したい。

あとはめちゃめちゃ長い記事でも引っかかった経験があります(>_<)

記事部分を囲う<div id=”main”>内に、大量の段落タグ<p>を使ったLPでね。

まぁ、これは仕方がない部分だと諦めたけど。

最低限全ページに表示されることになるであろう、サイドバーやフッターには気を付けたいところです。

まとめると

「過大な DOM サイズの回避」をWordPressで回避するには、テーマ選びやサイドバー・フッターのリスト管理が大事っていうことです。

ただし、あくまで「過大な DOM サイズの回避」からの観点。

実際にはどれくらいJavascriptが使われているか、非同期読み込みや遅延読み込みはなされているかの方が大事です。

つまり、「過大な DOM サイズの回避」は、わたしのようなページ表示速度にこだわるマニア向けの指標だと思います☆

あとがき

そういえば<table>タグがめちゃめちゃDOMをくっていた例があった。

<table>タグはヤバいね。

<tr>に<td>に、更に表が大きければ大きいほどいっぱい使うし。

LPでも思ったけど、どうしても無理なものはあるはず。

このDOMの要素数が多いと、どれくらいページ表示速度が低下するのかって話。

たぶん、YouTubeやTiwtterの埋め込みの方がよっぼど遅くなると思う。

PageSpeed Insightsのスコアもぶっちゃけ90点以上(緑)なら大して変わらない気もするよね。

SEO対策で早さは大事だけど、ある程度に達していれば同条件とみなされるんじゃない?

90点になるかならないかの瀬戸際に立っている場合は、こういうところを詰めていく恩恵はあるかな~。