ページ読み込みに時間がかかりすぎている場合、その原因となっている具体的なリソース(スクリプト、スタイルシート、画像、フォントなど)を特定する必要があります。Application Real-Time Monitoring Service (ARMS) の遅延セッションのトレース機能は、各ページ読み込み時の静的リソースの読み込み状況をウォーターフォール図で記録し、遅延している読み込みを個別のリソースまでトレースして修正できるようにします。
| 課題 | 遅延セッションのトレースによる解決効果 |
|---|---|
| ページ読み込みが遅い | 読み込み時間を個別のリソース単位で分解し、最も遅いリソースを特定できます |
| パフォーマンスの急激な変動(一時的なスパイク) | 指定されたタイムウィンドウ内で最も遅い上位 20 セッションをランキング表示し、比較分析が可能です |
| 根本原因が不明 | リソースのウォーターフォール図とクライアントのメタデータ(IP アドレス、ブラウザ、オペレーティングシステム)を関連付けることで、原因を絞り込めます |
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
ARMS ブラウザ監視に接続済みのアプリケーションがあること。設定手順については、「ブラウザ監視の概要」をご参照ください。
SDK 構成で
sendResourceパラメーターがtrueに設定されていること(「静的リソースのレポートを有効化」を参照)SDK 構成を更新した後にアプリケーションを再デプロイ済みであること
SDK での静的リソースのレポートを有効化
デフォルトでは、ARMS ブラウザ監視 SDK は静的リソースのデータをレポートしません。遅延セッションのトレースを有効化するには、SDK の config オブジェクト内で sendResource を true に設定します。
<script>
!(function(c,b,d,a){c[a]||(c[a]={});c[a].config={pid:"atc889zkcf@8cc3f6354******",imgUrl:"https://arms-retcode.aliyuncs.com/r.png?",sendResource:true};
with(b)with(body)with(insertBefore(createElement("script"),firstChild))setAttribute("crossorigin","",src=d)
})(window,document,"https://retcode.alicdn.com/retcode/bl.js","__bl");
</script>pid の値は、ARMS コンソールから取得したご利用のアプリケーションの PID に置き換えてください。
アプリケーションを再デプロイ後、ページが onload イベントを発火するたびに、SDK が静的リソースの読み込み時間データをレポートします。
データのサンプリングしきい値
sendResource を有効化すると、大量のテレメトリデータが生成されます。オーバーヘッドを制限するため、ARMS ではページ読み込み時間に基づいてデータをサンプリングします。
| ページ読み込み時間 | レポート動作 |
|---|---|
| 8 秒超 | 全データをレポート |
| 2 秒~8 秒 | セッションの 5 % をサンプリング |
| 2 秒未満 | データが報告されていません |
アプリケーションのページ読み込み時間が既に 2 秒未満である場合、静的リソースのレポートを有効化してもデータが得られず、ネットワークオーバーヘッドのみが発生します。有効化に伴うトレース効果とコストを十分に評価した上で、導入を検討してください。
ページ速度ページからの遅延ページ読み込みのトレース
この手順では、遅延しているページ読み込みを特定のリソースまでトレースする方法を説明します。ページ読み込み時間のスパイクを検知した際の推奨される最初の対応です。
ARMS コンソールで、左側ナビゲーションウィンドウより ブラウザ監視 > ブラウザ監視 を選択します。
ブラウザ監視 ページの上部ナビゲーションバーでリージョンを選択し、アプリケーション名をクリックします。
アプリケーション > ページ速度 を選択します。
ページ読み込み時間の詳細 セクションで、読み込み時間のスパイクを確認します。次の例では、11:00 にフルページ読み込み時間が 36.7 秒に達しています。

遅延ページセッションのトレース(TOP20) セクションまでスクロールし、選択したタイムウィンドウ内で最も遅い上位 20 セッションを確認します。タイムウィンドウを調整するには、右上隅の時計アイコンをクリックします。この例では、11:36:46 に読み込み時間が 36.72 秒に達するセッションがあり、これがスパイクの直接的な原因です。

ページ 列でページ名をクリックし、「遅延読み込みの詳細」ページを開きます。
ページリソース読み込みのウォーターフォール セクションのウォーターフォール図を確認します。各バーは 1 つのリソース要求を表し、その読み込み時間の内訳を示します。ウォーターフォール図を分析する際には、以下の点に注目してください。
他のリソースと比較して著しく長い読み込み時間を示すリソース
レンダリングをブロックする大規模なリソース(スクリプト、画像など)
レイテンシーを引き起こすサードパーティのリソース
サイズ: 0や時間: 0を表示するリソース(「ウォーターフォール図のデータのトラブルシューティング」を参照)

「遅延読み込みの詳細」ページの上部にある ページ情報 セクションで、クライアントのメタデータ(IP アドレス、ブラウザ、オペレーティングシステム)を確認します。この情報をもとに、ボトルネックがネットワーク関連か、あるいは特定のリソースに起因するかを判断してください。

セッションのトレースページからのセッションの閲覧
ページ速度 から始める代わりに、記録されたすべてのセッションを直接閲覧することもできます。
左側ナビゲーションウィンドウで、アプリケーション > セッションのトレース を選択します。
ユーザー名、ユーザー ID、セッション ID、IP アドレス、ページ URL、ブラウザ、ブラウザバージョン、接続タイプ、またはリージョンでセッションをフィルターします。

セッション ID 列でセッション ID をクリックし、「セッションの詳細」ページを開きます。セッションデータの解釈方法については、「セッション追跡」をご参照ください。
ウォーターフォール図のデータのトラブルシューティング
リソースのウォーターフォールで「サイズ」が 0 と表示される
サイズ 値は、ブラウザ API PerformanceResourceTiming.transferSize から取得されます。0 が返されるのは、以下の 2 つのケースです。
リソースはブラウザキャッシュから提供されました。
リソースがクロスオリジンであり、サーバーが
Timing-Allow-Originヘッダーを設定していない場合
確認するには、Chrome DevTools(F12)を開き、ネットワーク タブに移動して、キャッシュを無効化 を選択します。その後、ページを再読み込みすると、transferSize の値が表示されます。


リソースのウォーターフォールで「時間」が 0 と表示される
時間 値は PerformanceResourceTiming.duration から取得されます。0 が返されるのは、max-age ディレクティブによって制御される長期キャッシュからブラウザがリソースを提供した場合で、ネットワーク要求が発生しないためです。
確認するには、Chrome DevTools(F12)を開き、ネットワーク タブに移動して、キャッシュを無効化 を選択し、ページを更新します。タイミング値が表示されます。
クロスオリジンのリソースで、すべてのタイミングフィールドが 0 を返す
同一オリジンポリシーにより、クロスオリジンのリソースに対してブラウザは以下のタイミング属性について 0 を返します。
redirectStart、redirectEnd、domainLookupStart、domainLookupEnd、connectStart、connectEnd、secureConnectionStart、requestStart、responseStart
これを解決するには、クロスオリジンのリソース応答に Timing-Allow-Origin ヘッダーを追加します。
Timing-Allow-Origin: *これにより、任意のオリジンがリソースのタイミングデータにアクセスできるようになります。より細かい制御が必要な場合は、* の代わりに個別のオリジンを指定してください。
API ウォーターフォール図の時間範囲
API ウォーターフォール図は、ページ読み込み開始時刻から、ページ完全読み込み完了後 1 分間の期間をカバーします。ページ読み込み中に実行された API 要求の全体的な状態を示します。
ウォーターフォール図間で API 応答時間が異なる理由
API ウォーターフォール図における応答時間は、通常、リソースのウォーターフォール図よりも数ミリ秒長くなります。これは、2 つの図がタイミングを測定する方法が異なるためです。
| 図 | 測定方法 |
|---|---|
| API ウォーターフォール図 | 要求送信時刻からデータ受信時刻までの時間を測定 |
| リソースのウォーターフォール図 | performance.getEntriesByType('resource') を使用。ブラウザレベルのリソースタイミングに依存 |
この差異は無視できるほど小さく、ボトルネック分析には影響しません。
API ウォーターフォール図のタイムラインの開始点
API ウォーターフォール図のタイムライン原点は、API が要求を送信した時刻とページの fetchStart タイムスタンプとの差分に等しくなります。これにより、各 API 要求がページ読み込みライフサイクルに対してどのタイミングで発行されたかが明らかになります。