🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

6569閲覧

display:none要素が与えるページ表示速度への影響

tomtom1

総合スコア168

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

1グッド

3クリップ

投稿2021/02/26 17:51

###知りたいこと
display:none要素はページレスポンス、つまり表示速度に影響があるのか知りたいです。
質問は以下2つになります。

  1. ①と②には、ページレスポンスにが違いはあるか?

  2. ②と③には、ページレスポンスにが違いはあるか?

(もし質問1と2が両方yesの場合、なぜ②と③に違いは起きますか?)

1

1<h1>タイトル</h1>

2

1<h1>タイトル</h1> 2<div style="display:none;"> 3<p>ああああああああああああ</p> 4<p>ああああああああああああ</p> 5.....500行 6<p>ああああああああああああ</p> 7</div>

3

1<h1>タイトル</h1> 2<div> 3<p>ああああああああああああ</p> 4<p>ああああああああああああ</p> 5.....500行 6<p>ああああああああああああ</p> 7</div>
miyabi_pudding👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

適当にやったので正確に500行ではない(1000行ぐらい?)ですが、試してみました。
方法は、Firefoxのパフォーマンス測定で、リロードをしpagehideイベントが起こってから、DOMContentLoadedが起きるまでです。
①と②はほとんど差が見られませんでした。②と③には差がありました。ただ、繰り返し試行すると誤差も大きく、参考になる数値かどうかは分かりません。


miyabi_takatsukさんが回答でおっしゃっているとおり、display:noneでもDOMツリーに追加されますが、レンダリングツリーには追加されません。ですので、その部分のコストなのではないかと思いました。

↓この記事によると、
The main flow | How Browsers Work: Behind the scenes of modern web browsers - HTML5 Rocks
レンダリングツリーからレイアウトとペインティングというプロセスがあるので、レンダリングツリーに追加されないということはそのプロセスを全てスキップできます。

例示のような単純なレイアウトであればともかく、浮動や配置、重ね合わせなど、他のレンダリングに影響を与えるスタイルがある場合は、CSS Containmentと同様の観点から、パフォーマンスに差が出るのではないかと思います。


Chrome85 から実装されたcontent-visibilityに関する記事も参考になるかと思います。ページのパフォーマンスに関する興味深い内容ですので、ぜひご一読ください。

content-visibility: the new CSS property that boosts your rendering performance

投稿2021/02/27 08:41

Lhankor_Mhy

総合スコア36946

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2021/02/27 12:00

①と②に差がでないのは驚きでした。 やはり、何事も実際に試さないとわからないものですね・・・!
Lhankor_Mhy

2021/02/28 02:07

たぶん、誤差の中に埋もれてしまっているんだと思います。要素を増やせばまた結果が違うかと。
takna

2021/02/28 02:10

参考になります???? ①②は、接続状況が遅いと差が出ますよね。
think49

2021/02/28 04:04

「ダウンロード時間 + DOM処理時間 + レンダリング時間」となるので、仮に、@Lhankor_Mhy さんがローカルで検証していたら、「ダウンロード時間」が省略された検証になっている可能性はありますね。
Lhankor_Mhy

2021/02/28 07:05 編集

think49さんのおっしゃるとおりかと思います。 質問の意図も、ダウンロード時間を含めないような形ではないかな、と思います。
tomtom1

2021/03/08 09:48

ご回答大変勉強になりました。ありがとうございます。繰り返し試行すると誤差ありつつも、ローカル検証の場合、Lhankor_Mhyさんの回答となり、サーバー環境ですとダウンロード時間も含まれる為、miyabi_takatsukの結果になるという認識を持ちました。記載いただいた参考サイトもじっくり読んで学習をさせていただいます。
guest

0

ベストアンサー

直接的な回答にならないかもしれないのはご了承ください。

まず、以下、公式ではないですが、非常に参考になる記事を紹介します。

WEB高速化うんぬん - Qiita

要素の表示非表示は visibility:hidden の方が display:none よりも高速 - Qiita

display:none でページが軽くなるわけではありません - カスタマイズ

結論

さて、結論ですが、
①と、②では、明らかに差異が生じます。
Webページのライフサイクルには、
パースという、DOM Treeを生成するフェーズが存在するため、
(一つ目の記事参照)
パフォーマンスに影響は間違いなくでるからです。
これは、そのHTMLがどういった構造かを解析するフェーズで、ブラウザがレンダリングを行う際にとても重要なフェーズです。
見えなくとも、構造解析は行うため、その分レンダリングは遅くなります。
また、PageSpeed Insightsでは、
display: noneで隠している要素であっても、ページ全体の要素数を抑えろと、警告してくることからも、隠している要素も、レンダリングパフォーマンスに影響が出ることを、公式が認めていることになります。
(大量の隠し要素であれば、display: hiddenの方がいいのかも。
また、template要素であれば、その中身はリソースの読み込み自体は行われないため、displayのコントロールより高速となる)

なので、問題は、
②と③で差異が生じるのか、となります。
表示する際は、確かにレンダリングをしない②の方が速いように思いがちですが、
これは本当に実験をしてみないとなんとも言えませんので、
質問者さんが、実験をされてみてはいかがでしょうか?
500行では、影響を測り切れないと思いますが、
一万行とかであれば、表示に差異を持たせられると思います。

ですが、むしろ、②の方が遅くなるかもしれません。
②と③は、パースの時点で差異は生じませんが、
②は、インナースタイルによってレンダリングの前に一つ処理が挟まるため、
表示の切り替えが発生する分、③よりも②の方がパフォーマンスが落ちる可能性が高いと思われます。

投稿2021/02/26 20:04

編集2021/02/26 20:46
miyabi_takatsuk

総合スコア9555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomtom1

2021/03/08 09:51

ご回答いただきありがとうございます。頂いたご回答2つともベストアンサーとしたい気持ちでいっぱいですが、お先にご回答頂きましたのでベストアンサーとさせて頂きます。display:none要素が与えるページ表示速度への影響についての回答としてしっかり把握することができました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問