サイトを高速化して検索ランキングを改善してサイトへの流入を増やす。
以下記事でGoogleは表示速度をモバイル検索ランキングの指標とすることに言及している。
ref. https://webmaster-ja.googleblog.com/2018/01/using-page-speed-in-mobile-search.html
単一のドメインに対するTCPの同時接続数は、多くのブラウザで最大6に制限されていて、HTTP/1.1ではその制限の中で複数のTCPコネクションを持つことで並行性を確保しています(
佐藤 歩,泉水 翔吾. 超速! Webページ速度改善ガイド ── 使いやすさは「速さ」から始まる (WEB+DB PRESS plus) (Japanese Edition) (Kindle の位置No.1297-1299). Kindle 版.
TCP同時接続数は規定では2だが、現状多くのブラウザのTCP同時接続数は6となっている。
TCP同時接続が6なので、サブリソース(CSS/JavaScript/画像)のリクエスト数やファイルサイズを最適化する必要がある。
Googleは、ページのパフォーマンスを評価するフレームワークLighthouse
を公開している。
Lighthouse
を手軽に使用するツールとして以下の2つがある1。
(ツールによって指標の呼び方が異なる)
ツール | DevTools Lighthouse | PageSpeed Insight |
---|---|---|
指標 | Performance > Metrix | ラボデータ |
Ref.
項目 | 内容 | 対策 |
---|---|---|
First Contentful Paint(FCP) https://web.dev/fcp/ |
The First Contentful Paint (FCP) metric measures the time from when the page starts loading to when any part of the page’s content is rendered on the screen. For this metric, “content” refers to text, images (including background images), |
クリティカルレンダリングパス高速化 |
Largest Conetntful Paint(LCP) https://web.dev/lcp/ |
The Largest Contentful Paint (LCP) metric reports the render time of the largest image or text block visible within the viewport. |
FCPを改善 最大コンテンツ(メイン画像等)を最適化 |
Speed Index(SI) https://web.dev/speed-index/ https://sites.google.com/a/webpagetest.org/docs/using-webpagetest/metrics/speed-index |
Speed Index measures how quickly content is visually displayed during page load. Lighthouse first captures a video of the page loading in the browser and computes the visual progression between frames. Lighthouse then uses the Speedline Node.js module to generate the Speed Index score. |
FCPを改善 最大コンテンツ及びビューポート(≒ファーストビュー)のコンテンツを改善 |
Time To Intractive(TTI) https://web.dev/tti/ インタラクティブになるまでの時間 |
条件1:FCPを開始してからメインスレッドに5秒以上の余裕が生じた時点からさかのぼって、最後のロングタスク(50ms以上のタスク)の終わり 条件2:TCPコネクションが2以下 |
FCPの後に取得するリソース数およびロングタスクを改善 |
Total Blocking Time(TBT) https://web.dev/tbt/ |
The Total Blocking Time (TBT) metric measures the total amount of time between First Contentful Paint (FCP) and Time to Interactive (TTI) where the main thread was blocked for long enough to prevent input responsiveness. |
TTIが短ければ相対的にTBTも短くなる。 ロングタスクを改善 |
Cumulative Layout Shift(CLS) https://web.dev/cls/ |
CLS measures the sum total of all individual layout shift scores for every unexpected layout shift that occurs during the entire lifespan of the page. |
JavaScriptによる要素操作を改善 画像サイズ指定漏れを改善 |
ref.
https://github.com/GoogleChrome/lighthouse/blob/d2ec9ffbb21de9ad1a0f86ed24575eda32c796f0/docs/scoring.md#how-are-the-scores-weighted
ページは、Loading -> Scripting -> Rendering -> Paintingを経て表示される。この処理をクリティカルレンダリングパスと呼ぶ(フレームともいう)。
document.write()
といったJavaScriptの解析も含む
Webサイト高速化のおおきな作業の1つが上記クリティカルレンダリングパスの高速化である。
ref.
CSSとJavaScriptのロード中は、DOMツリーやCSSOMツリーに影響を与える可能性があるためレンダリング処理をブロックします。
佐藤 歩,泉水 翔吾. 超速! Webページ速度改善ガイド ── 使いやすさは「速さ」から始まる (WEB+DB PRESS plus) (Japanese Edition) (Kindle の位置No.1426-1427). Kindle 版.
以下リンクは、JavaScriptの動作をわかりやすく解説している。
当文章のJavaScript部分は基本的に以下リンク先を引用したもの。
※ 外部CSSも含めてCSSはDOMツリー構築をブロックしない。
しかしJavaScriptが現れた時点で、CSSにアクセスする可能性が発生するので、記載位置より前にあるCSSをすべてロードするまでDOM構築はブロックされる。
DOMツリーとCSSOMツリーの作成が完了した時点。
サブリソースも含めてロードが完了した時点。
以下のリンク内容を実行
https://developers.google.com/web/fundamentals/performance/critical-rendering-path/optimizing-critical-rendering-path?hl=ja
佐藤 歩,泉水 翔吾. 超速! Webページ速度改善ガイド ── 使いやすさは「速さ」から始まる (WEB+DB PRESS plus) (Japanese Edition) (Kindle の位置No.2070). Kindle 版.
loading="lazy"
佐藤 歩,泉水 翔吾. 超速! Webページ速度改善ガイド ── 使いやすさは「速さ」から始まる (WEB+DB PRESS plus) (Japanese Edition) (Kindle の位置No.1989-1997). Kindle 版.
.htaccess
を使って画像リクエストに対してwebpを返す
ディレクトリ内画像をexample.jpg -> example.jpg.webpに一括変換。
ref.https://qiita.com/ishimasar/items/bf92e22004fcaf870d9b
$ for file in *; do cwebp "$file" -o "${file%}.webp"; done
web fontファイルは、preload
しない場合は呼び出しもとがダウンロードされて、フォントが適用(解釈)されるときに、逐次的にロードされる。
(逆に言えば、フォントが利用されていなければフォントファイルはロードされない)
使用されることがわかっている場合は、preload
することによって呼び出し元と並列でロードできる可能性が高まる。
ブラウザキャッシュはすでにキャッシュされたのもをサーバー側で強制的にクリアすることはできない。
やるとしたら以下が可能な場合のみか。
対象MIMEタイプの全ファイルにデプロイ時にプレフィックスを付与できる場合。
例)スタイルとしてbootstrap.min.cssとstyle.min.cssしかなくデプロイ時に以下のようなサフィックスを付与可能な環境
.htaccess
のブラウザキャッシュ設定例
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/x-icon "access plus 6 months"
ExpiresByType text/css "access plus 1 months"
</IfModule>
ref.
https://lpeg.info/html/htaccess_cache.html
その他に、コマンドラインツールなども提供されている。 ↩
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。