RAIL モデルでパフォーマンスを測定する

RAIL は、パフォーマンスについて考えるための構造を提供する、ユーザー中心のパフォーマンス モデルです。このモデルは、ユーザー エクスペリエンスを主要なアクション(タップ、スクロール、読み込みなど)に分解し、それぞれのアクションのパフォーマンス目標を定義するのに役立ちます。

RAIL は、ウェブアプリのライフサイクルの 4 つの異なる側面(レスポンス、アニメーション、アイドル、読み込み)を表します。ユーザーはこれらのコンテキストごとに異なるパフォーマンスを期待しているため、パフォーマンス目標はコンテキストとユーザーが遅延をどのように認識するかについての UX 調査に基づいて定義されます。

RAIL パフォーマンス モデルの 4 つの部分(レスポンス、アニメーション、アイドル、読み込み)。
RAIL パフォーマンス モデルの 4 つの部分

ユーザーを重視

パフォーマンスの取り組みの中心にユーザーを据えましょう。次の表に、ユーザーがパフォーマンスの遅延をどのように認識するかについての重要な指標を示します。

パフォーマンスの遅延に対するユーザーの認識
0 ~ 16 ミリ秒 ユーザーはモーションを追跡するのが非常に得意で、アニメーションがスムーズでないと不快に感じます。1 秒あたり 60 個の新しいフレームがレンダリングされる限り、アニメーションはスムーズに認識されます。ブラウザが新しいフレームを画面に描画する時間を含め、1 フレームあたり 16 ミリ秒です。アプリがフレームを生成する時間は約 10 ミリ秒です。
0 ~ 100 ミリ秒 この時間枠内でユーザー アクションに応答すると、ユーザーは結果がすぐに返ってきたと感じます。これより長いと、アクションとリアクションのつながりが途切れてしまいます。
100 ~ 1,000 ミリ秒 このウィンドウ内では、タスクが自然かつ継続的に進行しているように感じられます。ウェブのほとんどのユーザーにとって、ページの読み込みやビューの変更はタスクに相当します。
1,000 ミリ秒以上 1,000 ミリ秒(1 秒)を超えると、ユーザーは実行中のタスクに集中できなくなります。
10000 ミリ秒以上 10,000 ミリ秒(10 秒)を超えると、ユーザーはストレスを感じ、タスクを放棄する可能性が高くなります。後で戻ってくる場合もあれば、戻ってこない場合もあります。

目標とガイドライン

RAIL のコンテキストでは、目標ガイドラインという用語は次のような意味を持ちます。

  • 目標。ユーザー エクスペリエンスに関連する主要なパフォーマンス指標。たとえば、100 ミリ秒以内にタップしてペイントします。人間の知覚は比較的一定であるため、これらの目標はすぐに変わることはありません。

  • ガイドライン。目標達成に役立つ推奨事項。現在のハードウェアとネットワーク接続の状況に固有のものであるため、時間の経過とともに変化する可能性があります。

レスポンス: 50 ミリ秒以内にイベントを処理する

目標: ユーザー入力によって開始されたトランジションを 100 ミリ秒以内に完了し、ユーザーがインタラクションを瞬時に感じられるようにします。

ガイドライン:

  • 100 ミリ秒以内にレスポンスを表示するには、ユーザー入力イベントを 50 ミリ秒以内に処理します。これは、ボタンのクリック、フォーム コントロールの切り替え、アニメーションの開始など、ほとんどの入力に当てはまります。これは、タッチ ドラッグやスクロールには適用されません。

  • 直感に反するかもしれませんが、ユーザーの入力にすぐに応答することが常に正しいとは限りません。この 100 ミリ秒のウィンドウを使用して他のコストのかかる作業を行うことができますが、ユーザーをブロックしないように注意してください。可能であれば、バックグラウンドで処理を行います。

  • 完了までに 50 ミリ秒を超えるアクションについては、必ずフィードバックを提供します。

50 ミリ秒か 100 ミリ秒か?

入力に対して 100 ミリ秒以内にレスポンスすることが目標なのに、バジェットが 50 ミリ秒しかないのはなぜですか?これは、一般的に入力処理に加えて他の作業も行われており、その作業が許容可能な入力応答に利用できる時間の一部を占有しているためです。アプリケーションがアイドル時間中に推奨される 50 ミリ秒のチャンクで作業を行っている場合、入力がこれらのチャンクのいずれかで発生すると、最大 50 ミリ秒までキューに登録される可能性があります。これを考慮すると、実際の入力処理に利用できるのは残りの 50 ミリ秒のみと想定するのが妥当です。この効果を視覚化したのが次の図です。アイドル タスク中に受信した入力がキューに登録され、使用可能な処理時間が短縮される様子を示しています。

アイドル タスク中に受信した入力がキューに登録され、利用可能な入力処理時間が 50 ミリ秒に短縮される様子を示す図
アイドル タスクが入力応答予算に与える影響。

アニメーション: 10 ミリ秒でフレームを生成する

目標:

  • アニメーションの各フレームを 10 ミリ秒以下で生成します。技術的には、各フレームの最大予算は 16 ミリ秒(1,000 ミリ秒 / 60 フレーム/秒 ≈ 16 ミリ秒)ですが、ブラウザが各フレームをレンダリングするには約 6 ミリ秒が必要なため、フレームあたり 10 ミリ秒というガイドラインが設けられています。

  • 視覚的な滑らかさを目指します。フレームレートが変動すると、ユーザーはそれを認識します。

ガイドライン:

  • アニメーションなどの負荷の高いポイントでは、できるだけ何もせず、できない場合は最小限に抑えることが重要です。可能な限り、100 ミリ秒のレスポンスを利用してコストのかかる処理を事前に計算し、60 fps を達成する可能性を最大限に高めます。

  • さまざまなアニメーション最適化戦略については、レンダリング パフォーマンスをご覧ください。

  • 開始と終了、トゥイーン、読み込みインジケーターなどの視覚的なアニメーション。
  • スクロール。フリング(ユーザーがスクロールを開始して手を離し、ページがスクロールし続ける状態)も含まれます。
  • ドラッグ。アニメーションは、地図のパンやピンチ操作によるズームなど、ユーザー操作に続くことがよくあります。

アイドル: アイドル時間を最大化する

目標: アイドル時間を最大化して、ページが 50 ミリ秒以内にユーザー入力に応答する可能性を高めます。

ガイドライン:

  • アイドル時間を使用して、延期された作業を完了します。たとえば、最初のページ読み込みでは、できるだけ少ないデータを読み込み、残りのデータはアイドル時間を使用して読み込みます。

  • アイドル時間中に 50 ミリ秒以内で作業を実行します。これより長いと、50 ミリ秒以内にユーザー入力に応答するアプリの能力を妨げるおそれがあります。

  • アイドル時間中にユーザーがページを操作した場合、ユーザー操作は常に最優先され、アイドル時間中の作業は中断されます。

読み込み: 5 秒以内にコンテンツを配信し、インタラクティブになる

ページの読み込みが遅いと、ユーザーの注意が散漫になり、タスクが中断されたと認識されます。読み込みが速いサイトでは、平均セッション時間が長く、直帰率が低く、広告の視認可能率が高くなります

目標:

ガイドライン:

RAIL を測定するためのツール

RAIL の測定を自動化するのに役立つツールがいくつかあります。どちらを使用するかは、必要な情報の種類と、好みのワークフローの種類によって異なります。

Chrome DevTools

Chrome DevTools は、ページの読み込み中や実行中に発生するすべてのことについて詳細な分析を提供します。[パフォーマンス] パネルの UI については、ランタイム パフォーマンスの分析を始めるをご覧ください。

特に重要な DevTools の機能は次のとおりです。

灯台

Lighthouse は、Chrome DevTools、PageSpeed Insights、Chrome 拡張機能、Node.js モジュール、WebPageTest で利用できます。URL を指定すると、低速の 3G 接続を備えた中程度のデバイスをシミュレートし、ページに対して一連の監査を実行して、読み込みパフォーマンスに関するレポートと、改善方法に関する提案を返します。

特に、次の監査が関連しています。

レスポンス

読み込み

WebPageTest

WebPageTest は、実際のブラウザを使用してウェブページにアクセスし、タイミング指標を収集するウェブ パフォーマンス ツールです。webpagetest.org/easy に URL を入力すると、低速の 3G 接続で実際の Moto G4 デバイスでページを読み込む際のパフォーマンスに関する詳細なレポートを取得できます。Lighthouse による監査を含めるように構成することもできます。

概要

RAIL は、ウェブサイトのユーザー エクスペリエンスを個別のインタラクションで構成されるジャーニーとして捉えるためのレンズです。ユーザーがサイトをどのように認識しているかを把握し、ユーザー エクスペリエンスに最も大きな影響を与えるパフォーマンス目標を設定します。

  • ユーザーへのアピール。

  • ユーザー入力に 100 ミリ秒以内に応答する。

  • アニメーションやスクロールの際に 10 ミリ秒未満でフレームを生成します。

  • メインスレッドのアイドル時間を最大化します。

  • インタラクティブなコンテンツを 5,000 ミリ秒以内に読み込みます。