sqsq120 テクニカブログ

html css javascript 多めの備忘録

html内にcssを直接書き込むとどんだけ表示速度遅くなるの?という話

こんにちは。
先日、会社で
「ファーストビューのCSSをhtmlに書いておくことでユーザの体感速度が上がる?」
的な話があり、
レンダリングエンジンもそんなアホじゃないっしょ。。」とか思いながら、
実際そんなことしたらどうなっちゃうのか調べてみました。

まぁ、
・キャッシュが参照できないので再訪したユーザへのパフォーマンスが落ちる
・htmlにもcssにも手を入れないと行けないので管理コストが増える
って感じでいいことないんですけどね。
ものは試しってことで。

【準備】

計測

SPEEDINDEX (TOKYO - IE9/Chrome)

html
<div id="css_search_test_box_1">
	<ul class="wrapper">
		<li><a href="#">テキスト<em>01</em></a></li>
		<li><a href="#">テキスト<em>02</em></a></li>
		<li><a href="#">テキスト<em>03</em></a></li>
		<li><a href="#">テキスト<em>04</em></a></li>
		<li><a href="#">テキスト<em>05</em></a></li>
		<li><a href="#">テキスト<em>06</em></a></li>
		<li><a href="#">テキスト<em>07</em></a></li>
		<li><a href="#">テキスト<em>08</em></a></li>
		<li><a href="#">テキスト<em>09</em></a></li>
		<li><a href="#">テキスト<em>10</em></a></li>
	</ul>
</div>

上記のリストを1000回繰り返し。
idの末尾の数字が増える作り。実際にはSmarty使った。

CSS (というかSass)
@for $i from 0 through 1000 {
	#css_search_test_box_#{$i} {
		.wrapper {
			margin: 10px 20px;
		}
		ul {
			border: solid 1px #999;
			@include border-radius(4px);
		}
		li {
			border-bottom: solid 1px #999;
			&>a {
				font-size: 16px;
				vertical-align: middle;
				min-height: 35px;
				padding: 10px;
				@include display-box;
				@include box-align(center);
				em {
					font-weight: bold;
				}
			}
			&:last-child {
				border-bottom: none;
			}
		}
	}
}

こんな感じで無駄にスマホっぽくしてみた。
CSSにfor文使うの新鮮で楽しい。

【準備ファイル】
ファイルサイズ(html) ファイルサイズ(CSS)
html内記述 0% 546KB 749KB
html内記述 25% 733KB 562KB
html内記述 50% 920KB 375KB
html内記述 100% 1.3MB -
【結果】
ファイルサイズ(html) ファイルサイズ(CSS) 読み込み速度
html内記述 0% 546KB 749KB 292ms
html内記述 25% 733KB 562KB 468ms
html内記述 50% 920KB 375KB 498ms
html内記述 100% 1.3MB - 1381ms

・html自体の読み込みに思いのほか時間がかかってる様子。

まとめ

やはり事前予想通りで、仮説のようなことはない。
SPEEDINDEXの体感速度指数もhtml内記述が0%のものが一番良かったし。
cssは全て別ファイル管理がよいね。