Webパフォーマンスは大きなテーマで、Web全体でパフォーマンステストのヒントやチュートリアルは廃れることはありません。Webサイトやアプリケーションの調整を開始する前に、まずユーザーにとって何か重要なメトリックかを把握し、達成可能なベンチマークを確立していきます。
パフォーマンステストとはどういうものか
パフォーマンステストでは、ソフトウェアツールを使用し、ある状況でのアプリケーションの実行をシミュレートしていくことになります。定量的なパフォーマンステストでは応答時間などを調べ、定性的なテストではスケーラビリティ、安定性、相互運用性を測ります。
「パフォーマンス」という言葉を聞くと、人はすぐにスピードを考えます。最近では、読み込み時間と応答時間を短縮することもちろん必要ですが、全体を考える必要もあります。
実稼働テスト中にすべてが完璧に機能するからといって、ウェブサイトがトラフィックであふれかえっている状況では機能しているとはいえません。
パフォーマンステストを行う利点
Webサイトやアプリケーションのパフォーマンスをテストして問題を特定しパフォーマンスを向上させれば、ユーザーエクスペリエンスも向上し、収益が増加します。
パフォーマンステストで判明する問題はいくつかありますが、容量制限によるデータフローの中断は、ボトルネックと呼ばれます。たとえば、サーバーが処理できないほどトラフィックが急増した場合に発生するケースが多いです。テストしなければ、後ほど対処するのはもっと難しくなります。
ボトルネックは、Webサイトがスケーラブルでない場合に発生することもあり、アプリケーションのパフォーマンス自体が低下し、遅延、エラー、メモリリークが発生します。
アプリケーションのパフォーマンスの問題はCPUや帯域幅の制限が原因であることが多く、リソースを再割り当てするか、より確実なインフラストラクチャに投資するなどが取れる対策になります。
Webサイトへのアクセス経路などサイト訪問者について収集できる情報もあるためユーザーエクスペリエンスを改善する方法を模索することもできるようになります。
パフォーマンステストの種類
Webページのテストツールは有用で、Webサイトの速度と全体的なパフォーマンスの概要をすばやく確認できますが、次のようなさまざまなテストを使用して、より徹底的な分析を行う方が良いでしょう。
・負荷テスト:
ワーク量の増加がアプリケーションの応答時間にどのように影響を与えるのかを調べます。たとえば、負荷テストツールを使用して、一定数の同時ユーザーでのアプリケーションのパフォーマンスを確認できます。負荷テストの目的は、通常の作業条件下でのアプリケーションの動作を評価することです。
・ストレステスト:
ストレステストは負荷テストに似ていますが、通常の作業条件外でアプリケーションがどのように実行されるかを調べます。目的は、アプリケーションがクラッシュするまでに処理できる同時ユーザーやトランザクションの数を明らかにすることです。
負荷、ストレステストは、ボトルネックを特定し、リソースを最適に使用しより多くのトラフィックに対応する方法をとるのに役立ちます。
・スパイクテスト:
スパイクテストは、ワークロードが急速、繰り返し増加する場合にアプリケーションのパフォーマンスをシミュレートするためのストレステストです。
・耐久性テスト:
浸水テストとも呼ばれる耐久性テストでは、長期間にわたってアプリケーションのパフォーマンスを測定します。耐久性テストは、メモリリークや時折発生する事故を特定できます。
・スケーラビリティテスト:
スケーラビリティテストは、増加したワークロードに対するアプリケーションの応答性を評価します。スパイクテストとは異なり、パフォーマンスへの影響を監視しながら、ワークロードを徐々に増やしていきます。また、ワークロードが同じままでもリソース使用量が変動する場合があります。
・ボリュームテスト:
フラッドテストとも呼ばれ、ボリュームテストは、大量のデータを処理する際のアプリケーションのパフォーマンスに特に焦点を当てています。
メトリックとはどういうものか
ウェブサイトのパフォーマンスを改善するには、まず測定を行う必要がありますが、測定はメトリックとは何か違うのでしょうか?
測定とは、処理にかかる秒数などのデータポイント自体を指します。メトリックは実際に測定されているものです。パフォーマンステストに関連するいくつかのメトリックは次のとおりです。
・レスポンス時間:
要求とそれに対する応答時間。特定の条件下でのあらゆるアクションごとに異なります。
・平均読み込み時間:
リクエストの平均応答時間は、ユーザーエクスペリエンス全体に大きく影響します。
・ピーク応答時間:
最も時間のかかる応答時間を測ります。ピーク応答が平均ロード時間よりはるかに長い場合は、何か問題があります。
・待機時間:
平均待機時間と呼ばれることもありますが、リクエストが処理されるまでにキュー内で費やす時間のことです。待機時間と応答時間は異なる原因によるため、この2つは区別しなければなりません。
・1秒あたりのリクエスト:
1秒あたりに処理されるリクエストの数。
・メモリー使用率:
要求の処理に必要なメモリーの量。
・CPU使用率:
CPUが要求を処理するのに必要な時間。
・エラー率:
要求に対するエラーの比率。
・成功した/失敗したトランザクション:
エラー率と似ていますが、リクエストが失敗する原因となる他の要因を考慮します。
・同時ユーザー:
負荷サイズとも呼ばれ、同時ユーザーはアクティブなユーザーの数を意味します。
・スループット:
通常、1秒あたりのキロバイト数で測定され、パフォーマンステスト中に使用される帯域幅のことです。これはWebサイトのキャパシティの重要な指標であり、スループット目標を設定することは、Webサイトのキャパシティを改善する第一歩となります。
開発者向けのテストツールの例
テストの最初のステップは、適切なツールを選択することです。アプリをテストする無料のプレミアムツールは多数ありますが、ここではほんの一例を紹介します。
KeyCDNツール
KeyCDN Toolsは、コンテンツ配信サービスに加えて、一般に提供している無料のWebテストツールです。ページスピードテストでは、Webサイトのパフォーマンスのウォーターフォール内訳を確認できます。また、14の別箇所からページがロードされる速度をテストできます。
Google Lighthouse
Google Chrome DevToolsファミリーの一つで無料オープンソースツールです。URLを入力すると、Lighthouseは調査し、改善のアドバイス入りのレポートを返します。
Selenium
テストを記録、編集、デバッグするための軽量のオープンソーステストフレームワークです。
Loadstorm
手頃な価格で利用可能な最大50,000人分のユーザーをテストできる負荷テスト用のプレミアムオプションです。クラウドベースのサービスは、1秒間に膨大な数のリクエストを送信し、Webサイトの維持方法をシミュレートします。
WebLOAD
数千人のユーザーがいるエンタープライズアプリケーション向けのものですが、無料限定版が利用可能です。
パフォーマンステストの手順
ツールを決定したら、パフォーマンスをテストする際の一般的な手順を以下に示します。
1.目標を設定する:ユーザーにとって最も重要なメトリックを決定し、理想的なベンチマークを決めます。
2.テストシナリオを計画する:特定の状況を考えます。ある数のユーザーが特定のアクションを同時に実行しようとするとどうなるでしょうか?
3.テスト環境の準備:ハードウェアとネットワークの構成が実際のものを厳密に反映していることを確認しましょう。
4.データのテストと結果の収集:テストソフトウェアにハードワークを行わせてから、結果を評価します。
5.繰り返し:パフォーマンスが一貫していることを確認するために同じ条件でテストを再度行い、異なるパラメーターで試します。
ウェブサイトのパフォーマンスデータを定量化して問題を解決することもできるようになります。
パフォーマンステストのその他のポイント
できるだけ早めに、そして頻繁にテストします。
テストを早期に実装するほど、問題が発生したときに簡単に対処できます。可能であれば、単体テストフェーズで行いましょう。現実的であることが重要です。Webサイトやアプリケーションのパフォーマンスは、リソースによって制限されます。
達成可能な目標を設定できるように、限界を把握します。
現実的なテストシナリオを作成します。負荷がゼロの状態でパフォーマンステストは行わないようにしましょう。これは非現実的な状況です。
他のあらゆるWeb開発と同じく、Webパフォーマンスは対象ユーザーによって調整することが必要です。海外ユーザーが多くいる場合は、海外訪問者をサポートするようなインフラストラクチャを確保する必要があります。また訪問者の大部分が携帯電話でアクセスしている場合、モバイルデバイスの最適化に集中しましょう。
多くのテストツールを使用すれば、ユーザーの動作を詳細に監視できます。
時間をかけて、テスト環境を設定します。実稼働環境に似たテスト環境を使用することは、Webパフォーマンスの正確な状況を把握するためには不可欠です。何かに投資する前に最適化することを検討してみましょう。
現在のリソースの最適化をせずに新しいサーバーや多くの帯域幅を購入するのはお金の無駄になるでしょう。その前に、インフラストラクチャをより効率化させることに集中してみましょう。
パフォーマンステストは常に継続すること
パフォーマンステストは継続して行いましょう。ウェブサイトやアプリケーションが成長し続け、今よりも多くの利用者に対応していくことになるかもしれません。テストを疎かにすれば、その反対の結果になってしまうかもしれないのです。