Back To HOME
ブログのパフォーマンスを改善する
2025/01/16
😢 ブログの表示が遅い
大体完成した弊ブログだが表示速度が気になる。試しにLighthouseでパフォーマンス計測してみたところやっぱり遅い。
LCPのスコアが悪いようだ。詳しく見てみると背景画像がLCPとして認識されており、この画像の表示速度がボトルネックになっていそう。
この画像はbanner.png
として読み込んでいるもので、試しにdevtoolのPerformanceタブで計測しネットワークを監視してみると、確かに読み込みが遅い。
ほぼほぼ原因は特定できたがまだ仮説なので検証してみる。
devtoolのNetworkタブからbanner.png
を右クリックしてBlock request URL
を選択し、banner.png
を読み込まないようにする。この状態でLighthouseでパフォーマンス計測を行い、スコアがどのくらい上がるか検証する。
無事100点が取れた。したがってbanner.png
の表示速度を改善すれば、スコアを確実に上げることができることがわかった。
🪛 画像の最適化
Sourceタブから画像のサイズを確認してみると2.9MBとかなり大きい。
googleによると1つのページでリクエストするリソースの合計サイズは1600kB以下に抑えるべきとのことなので、画像1つだけで超過してしまっていることになる。
このブログはAstroで構築しているのだが、Astroにはすでに画像最適化の仕組みが備わっているらしい。 src/
に画像を配置しAstro:asset
から呼び出すだけで自動的にサイズの計算、webpへの変換もしてくれるそう。早速試してみる。
import bannerImage from "../images/banner.png";
import { Image } from "astro:assets";
- <img
- src="/banner.png"
- alt="banner image"
- decoding="async"
- loading="lazy"
- />
+ <Image
+ class="fixed right-0 w-screen"
+ src={bannerImage}
+ alt="banner image"
+ />
無事2.9MBから230kBに圧縮され、スコアも95点になった。100点まであと一歩。さらに改善するために画像をレスポンシブ化する。
現状モバイルの画面でも1920x1024サイズの画像を読み込んでしまっているが、widths
を設定することで画面幅に応じて最適なサイズの画像を読み込むようできる。
<Image
class="fixed right-0 w-screen"
src={bannerImage}
+ widths={[240, 540, 720, bannerImage.width]}
+ sizes={`(max-width: 360px) 240px, (max-width: 720px) 540px, (max-width: 1600px) 720px, ${bannerImage.width}px`}
alt="banner image"
/>
モバイルサイズだと720x384の画像をfetchしておりサイズも59.5kBとさらに削減できていることがわかる。またこの画像は背景画像であり画質にはそこまでこだわらなくて良いはず。quality
をlow
に指定してでさらに画像を圧縮する。
<Image
class="fixed right-0 w-screen"
src={bannerImage}
widths={[240, 540, 720, bannerImage.width]}
sizes={`(max-width: 360px) 240px, (max-width: 720px) 540px, (max-width: 1600px) 720px, ${bannerImage.width}px`}
+ quality={"low"}
alt="banner image"
/>
無事100点を取ることができた。
もちろんデスクトップ環境も100点。(デスクトップ環境ではネットワークスロットルに制限がかからないのでモバイルよりも点数を取るのが簡単)
🤓 まとめ
LCPのスコアを改善するためには背景画像の最適化を行った。AstroではAstro:asset
から画像を呼び出すだけで自動的にサイズの計算、webpへの変換もしてくれるので、画像の最適化がとても簡単にできる。またwidths
やquality
の指定をすることでさらに細かくカスタマイズも行えることがわかった。これからも定期的にパフォーマンス計測を行い、改善を続けていきたい。