LoginSignup
1
4

More than 1 year has passed since last update.

Webパフォーマンスボトルネックのチェックリスト

Posted at

概要

Webシステムのパフォーマンスが悪くなった際、どの観点で見るべきなのか漏れてしまう可能性があるため、チェックリストとして観点をまとめました。

※この記事は都度更新して観点を追加します!

Webパフォーマンスとは

MDNの「ウェブパフォーマンスとは」では以下のように解説されています。

ウェブパフォーマンスとは、遅い処理を速く見せることも含めて、ウェブサイトを速くすることです。サイトがすぐに読み込まれるか、ユーザーがすぐに操作を始めることができるか、何かの読み込みに時間がかかっている場合には安心感のあるフィードバック (ローディングスピナーなど) を提供しているか。スクロールやアニメーションはスムーズか。

今回は下記の2つの点に着目してチェックリストを考えていきます。

  1. サイトの読み込み時間を削減する
  2. ユーザーが操作可能な状態を早く実現する

1. サイトの読み込み時間を削減する

ウェブサイトの表示に必要なファイルが、ユーザーの環境にダウンロードされるまでの時間を削減する方法を考えます。

下記の観点で対応方法を検討します。

  • 💽 データを削減する
  • 📡 通信回数を削減する

フロントエンド

  • 💽 読み込みリソースを疑う
    • ファイルのサイズが大きくないか
    • ファイルの数が多くないか
  • 💽 リソースの読み込みタイミングが適切かを疑う

バックエンド

  • 💽 発行されるSQLを疑う
    • データ取得時にスロークエリ、N+1問題が発生していないか
  • 💽 レスポンスに含まれるリソースのサイズを疑う
    • サムネイルに保存画像がそのまま利用されていないか
      • 高画質な画像をサムネイルにそのまま利用すると、レスポンスサイズを不必要に増加させます
      • 適切なサイズに画像を加工し、データサイズが削減されていることをチェックしましょう
      • Active StorageのVariantの指定方法いろいろ
  • 💽 レスポンスのレコード量を疑う
  • 📡 適切なレスポンスが戻せていないことを疑う
    • フロント側で画面に必要な情報を作成するため、複数回のAPIを投げさせていないか
      • フロント:バック = 1:1 の場合のみに限りますが、画面ごとに最適なレスポンスを戻すことで通信回数が削減されます

2. ユーザーが操作可能な状態を早く実現する

ユーザーがすぐに使い始めることができる状態、何を操作すれば良いかを伝えるための方法を考えます。
(ここは情報が薄いので、必要)

下記の観点で対応方法を検討します。

  • ℹ️ ユーザーに情報を連携する

フロントエンド

  • ℹ️ ユーザーの優先度の高い情報を表示できているか疑う
    • 優先度の高い情報を先に読み込めているか
      • ユーザーのアクティビティを考慮した、読み込みフローになっているかをチェックします
        • このフローはUXに直結する部分となるため、チェックリストレベルで考えるものではないと判断しております...
  • ℹ️ ユーザーに待ち時間を与えない仕組みになっているかを疑う
    • リソースの読み込みがバックグラウンドで実施されているか
      • リソース読み込みが非同期処理で行われているかをチェックします

バックエンド

  • ℹ️ ユーザーに連携すべき情報を戻せているか疑う
    • バリデーションやエラー時に適切なメッセージが戻せているか
      • ユーザーに表示したいエラーがある場合、実装されているかをチェックします
1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4