ロゴテキスト ロゴ

    Nuxt Contentで作ったサイトの表示パフォーマンスを改善する

    Nuxt Contentで作ったサイトの表示パフォーマンスを改善する

    私のサイトの表示速度がやたら遅い。。🤯

    構成としてはNuxt Contentを使ってSSG、UIフレームワークとしてVuetify、デプロイ先としてNetlifyを使っています。


    どうにか改善出来ないものか、と思い色々試してみました。



    先にこのブログの制作環境と合わせ、 遅くなっている原因になっている可能性のあるライブラリも合わせて記載します。

    検証した環境

    1 nuxt 2.14.3
    2 @nuxt/content 1.8.1
    3 vuetify 1.11.2
    4 nuxt-fontawesome 0.4.0

    サイトの表示速度

    Lighthouseを使ってページをチェックしてみました。

    トップページ

    PCサイズ

    トップページのPCサイズをLighthouseで計測した結果


    SPサイズ

    トップページのSPサイズをLighthouseで計測した結果

    SPのパフォーマンスひっくいwww ギャグだ。。笑


    記事詳細ページ

    ↓のページが大きめのgifを使っていて画像も多く利用していたのでこちらで試してみました。

    AlfredのワークフローをNodeで作成する | tech-broccoli.life



    PCサイズ

    記事詳細ページのPCサイズをLighthouseで計測した結果


    SPサイズ

    記事詳細ページのSPサイズをLighthouseで計測した結果

    総じてSPサイズのパフォーマンスが低い。

    PCサイズも全く褒められたものではないので出来る限りの対処してみます。

    対策としてやったこと

    画像等をLazy Loadする(効果薄、ただし体感速度は向上)

    画像をLazy Load(遅延読み込み)する事で、全ての画像を読み込む前にページ自体を読むこむ事が出来るようになります。

    ページを開いた時に画像が中々表示されず、更にはその表示が終わるまでサイトの読み込み中のマークが出続けていたため試してみました。



    実装には nuxt-lazy-load というライブラリを使用しました。

    トップページ

    PCサイズ

    トップページのPCサイズをLazy Loadをした後にLighthouseで計測した結果


    SPサイズ

    トップページのSPサイズをLazy Loadをした後にLighthouseで計測した結果

    逆にスコアが悪くなってる。。。🤯




    記事詳細も結果が変わらなかったので記事詳細の画像はなしで。



    個人的な感想としてはスコアは悪くなったのですが、ページ自体の読み込み速度(ブラウザのローディングがくるくる回っている時間)は速くなったので、 体感としては速くなったイメージでした。





    imgにdecoding=“async”を設定する(効果薄、ただし体感速度は向上)

    Lazy Loadを調べている中で知ったことなのですが、

    Lazy Load以上に設定も楽で良さそうな decoding="async" という存在を知りました。

    decoding=“async” VS loading=“lazy” — ブログ | 株式会社Spelldata



    Lazy Load と decoding=“async” は併用出来ない、との事なので、 Lazy Loadを外して decoding=“async” のみを設定して計測してみました。



    SPサイズ

    トップページのSPサイズをdecoding=asyncをした後にLighthouseで計測した結果

    うん、変わらないww



    けど、Lazy Loadと違って画面に表示されない画像も非同期で取得してくれているためか、 画像がスムーズに表示されるように感じました!

    (私はLazy Loadではなくこちらを導入する事にしました)




    VuetifyのdefaultAssetsをなくす(PCに効果あり)

    Lighthouseを調べた時以下の2つの項目が表示時間に影響を与えているよう

    • materialdesignicons.min.css
    • materialdesignicons-webfont.woff2
    material design関係のリソースが表示の原因になっている

    どちらもマテリアルデザイン関係の何か 🤔

    最初入れた覚えがなくて「?」となっていたのですが、Vuetifyの設定によって自動的に使われるのですね。




    自動的に読み込ませなくするためにVuetifyの defaultAssets をOFFにして改めて計測してみます。


    トップページ

    PCサイズ

    defaultAssetsをOFFにしてトップページのPCサイズをを計測した結果


    SPサイズ

    defaultAssetsをOFFにしてトップページのSPサイズをを計測した結果

    PCサイズはかなり良くなりました!

    SPサイズは少し良くなったけど、まだまだ。

    記事詳細ページ

    PCサイズ

    defaultAssetsをOFFにして記事詳細ページのPCサイズをを計測した結果


    SPサイズ

    defaultAssetsをOFFにして記事詳細ページのSPサイズをを計測した結果

    PCは少し良くなって、SPは少し悪くなってる。



    Font Awesomeの必要なフォントのみをimport(PC効果小、SP効果大)

    Font Awesomeを導入した際に「Font Awesomeは気をつけないと全てのフォントを読み込んでしまうため、app.jsの容量が大きくなってしまう」という記事を見ました。


    (その時点で必要なフォントだけ読み込めよ、という話なんですがw)



    単純な話、ファイルが軽量になればそれだけサーバーからファイルをDLする時間が短くなります


    そのためFont Awesomeを必要なフォントだけ導入するようにしてみました。

    トップページ

    PCサイズ

    Font Awesomeの軽量化適用後のトップページのPCサイズをを計測した結果


    SPサイズ

    Font Awesomeの軽量化適用後のトップページのSPサイズをを計測した結果

    必要なFont Awesomeのみにする事でSPがすごく改善されました!

    SPはjsのバンドルサイズが小さくなる事がパフォーマンスに直結するのですね。


    PCも最初と比べ 74 → 88 とだいぶ良くなりました!


    記事詳細ページ

    PCサイズ

    Font Awesomeの軽量化適用後の記事詳細ページのPCサイズをを計測した結果


    SPサイズ

    Font Awesomeの軽量化適用後の記事詳細ページのSPサイズをを計測した結果

    SPサイズは1番最初に測った時より全体的に悪くなってる…w



    これは画像サイズが大き過ぎる、mp4を使うべきところでgifを使っている、等画像関係の指摘が大きい模様。

    画像サイズの大きさの指摘




    これ以外の対応をした時にまた更新します!

    プロフィールの背景画像 プロフィール画像
    Yuki Takara
    都内でフリーランスのエンジニアをやってます。フロントとアプリ開発メインに幅広くやってます。