コンテンツにスキップ

UniApp ミニアプリ JavaScript SDK パフォーマンス問題分析

本ドキュメントでは、@cloudcare/rum-uniapp 2.2.21 以降が収集するページパフォーマンスフィールドと、それらを使って初回レンダリングの遅延やページ退出前の未レンダリングなどの白画面候補問題を識別する方法について説明します。

このドキュメントは UniApp ミニアプリ JavaScript SDK を対象としており、GCUniPlugin-* ネイティブモジュールには適用されません。すべての所要時間フィールドは、Guance に報告されるときにナノ秒(ns)に統一されます。

収集範囲

SDK は以下のパフォーマンスシグナルを収集できます。

  • ページロード、onReady、初回レンダリング、FP、FCP、LCP
  • ページ退出前に onReady またはプラットフォームの初回レンダリングシグナルがトリガーされたかどうか
  • setData の回数、累計所要時間、最大所要時間、待機所要時間、更新所要時間、マージ回数
  • 起動試行、ネイティブ起動、スクリプト実行、コードパッケージダウンロード
  • 遅いページに関連付けられた Resource および Error データ

SDK はスクリーンショットを収集せず、ビジネススケルトンスクリーン後のコアコンテンツが利用可能かどうかを判断することもできません。そのため、いずれかのパフォーマンスフィールドが欠落していても、直接白画面と等価になるわけではありません。

プラットフォームパフォーマンスデータ

SDK は可能な限りミニアプリプラットフォームが提供する Performance API を使用します。Observer が正常にサブスクライブされた場合、performance_supported=true となります。プラットフォームが同時に利用可能な初回レンダリングシグナルを提供する場合、first_render_supported=true となります。

微信と互換プラットフォーム

微信形式のエントリは、以下の指標に直接マッピングされます。

Performance entry RUM フィールド
navigation.duration loading_time
render:firstRender.duration first_render_time
render:firstPaint.startTime - navigationStart page_fp
render:firstContentfulPaint.startTime - navigationStart page_fcp
render:largestContentfulPaint.startTime - navigationStart page_lcp

コールドスタート時の appLaunch と通常の route navigation の両方で、ファーストビューページの識別が可能です。SDK は route、pageId、最新の navigationStart に基づいて現在のページインスタンスを選択します。paint が navigation より先に到着した場合は一時保存され、entry の絶対 startTime が所要時間として誤って扱われることを防ぎます。

抖音ミニアプリ

抖音は paintevaluatenavigationresourcelaunch のエントリを使用します。SDK はまず統一口径に変換します。

抖音エントリ 統一口径
paint:first-paint page_fpfirst_render_time
paint:first-contentful-paint page_fcp
paint:largest-contentful-paint page_lcp
evaluate:app-service action_type=script_insert
resource:miniprogram-package action_type=package_download

抖音には微信の firstRender エントリがないため、SDK は現在のページの first-paint - navigationStart をそのプラットフォームの初回レンダリングシグナルとして使用します。この口径は FCP またはビジネスコンテンツの可用性と同等ではありません。

View パフォーマンスフィールド

機能とライフサイクル属性

フィールド 説明
performance_supported boolean 現在のプラットフォームの Performance Observer が正常にサブスクライブされたかどうか
first_render_supported boolean 現在のプラットフォームに SDK が利用可能な初回レンダリングシグナルが存在するかどうか
view_start_reason string page_loadpage_show、または session_renewal
view_end_reason string onHideonUnload、または session_renewal
ready_reached boolean 現在のページのライフサイクルが onReady に到達したかどうか
first_render_reached boolean 現在のページがプラットフォームの初回レンダリングシグナルを受信したかどうか
ended_before_ready boolean page_load View の終了時にまだ onReady に到達していないかどうか
ended_before_render boolean 初回レンダリングシグナルがサポートされている場合、page_load View が初回レンダリング前に終了したかどうか
view_is_active boolean View がまだアクティブ状態かどうか

ended_before_render は、first_render_supported=true の場合にのみ統計的に意味を持ちます。セッション更新は RUM View を分割するだけで、ページの再読み込みを意味しないため、ページの早期退出の結論は生成されません。

レンダリング所要時間

フィールド 説明
loading_time ページ navigation とライフサイクルで観測された最大ロード所要時間
page_ready_time View 開始から onReady までの所要時間
first_render_time 微信:firstRender.duration;抖音:first-paint - navigationStart
page_fp 現在のページの navigationStart に対する FP の相対所要時間
page_fcp 現在のページの navigationStart に対する FCP の相対所要時間
page_lcp 現在のページの最新の LCP の navigationStart に対する相対所要時間
first_render_data_transfer_time 初回レンダリング初期化データの受信時間から送信時間を引いた値
first_render_wait_time データ受信完了からビュー層のレンダリング開始までの待機時間
first_render_view_layer_time ビュー層の初回レンダリング所要時間

first_paint_timefirst_render_time は互換フィールドであり、いずれも SDK が選択した初回レンダリングシグナルを表します。実際の FP を分析する必要がある場合は page_fp を使用してください。

setData 所要時間

フィールド 説明
view_setdata_count 有効な setData 更新サンプル数
view_setdata_duration すべての有効な更新の累計所要時間
view_setdata_max_duration 単一更新の最大所要時間
view_setdata_pending_duration キューに入ってから更新が開始されるまでの累計待機時間
view_setdata_update_duration 更新開始から終了までの累計実行時間
view_setdata_merged_count プラットフォームによってマージ処理された更新回数

SDK は、リスナーインストール時の所属ページを記録します。非表示のページや古いコンポーネントの遅延コールバックは現在の View に計上されず、ページがアンロードされたりコンポーネントが分離されたりすると、リスニングを停止します。

起動段階の指標

起動段階は action データとして報告されます。

action_type 説明
launch_attempt 最初の App.onLaunch 到達。SDK インスタンスごとに 1 回。duration は書き込まれず、app_launch_attempt=true を有効フィールドとして使用
launch プラットフォームの appLaunch navigation duration
script_insert スクリプト実行所要時間
package_download ミニアプリコードパッケージのダウンロード所要時間

最後の 3 つはプラットフォームの Performance entry に依存します。launch / launch_attempt 比率を使用してネイティブ起動指標のカバレッジを観察することを推奨します。エントリがないことをゼロ所要時間と見なさないでください。

白画面候補統計

白画面分析は、カバレッジ、遅延レンダリング、早期退出の 3 つのカテゴリに分割することを推奨します。

統計サンプル

まず以下の条件でフィルタリングします。

view_start_reason = page_load
performance_supported = true
first_render_supported = true

初回レンダリングシグナルをサポートしていないプラットフォームは、カバレッジを個別に統計し、ended_before_render の分母に含めないでください。

推奨口径

問題 推奨条件 説明
遅延初回レンダリング first_render_time がビジネスしきい値を超えている P75、P95、およびしきい値超過割合の統計に適している
退出前に初回レンダリング未実行 ended_before_render=true 信頼度の高い白画面候補だが、ユーザーが素早く戻る操作を行った場合にも該当する
長時間 Ready 未到達 page_ready_time がしきい値を超えている ページライフサイクルまたは初期化のブロッキングを反映。視覚的な白画面と同等ではない
退出前に Ready 未到達 ended_before_ready=true view_end_reason と滞在時間を組み合わせて、素早い離脱を除外する必要がある
FCP/LCP が遅い page_fcp または page_lcp がしきい値を超えている コンテンツ出現時間および主要コンテンツ安定時間により近い

推奨ダッシュボードには少なくとも以下を含めてください。

  1. Performance と初回レンダリングシグナルのカバレッジ
  2. FP、FCP、LCP、firstRender の P50、P75、P95
  3. ended_before_renderended_before_ready の割合
  4. 遅い View の Error、失敗 Resource、5xx、TTFB の分布
  5. アプリケーションバージョン、プラットフォーム、OS、デバイスモデルで分割したトレンド

既知の制限

  • SDK にはビジネス向けの markViewReady() API がなく、コアビジネスコンテンツが利用可能であることを確認できません。
  • Page の onLoad 前に発生する致命的なエラーには View Context がない可能性があります。
  • 現在、Long Task、FPS、ページフリーズ、スクリーンショットは収集しません。
  • プラットフォームの Performance API、ベースライブラリ、OS バージョンの違いにより、フィールドのカバレッジが影響を受ける可能性があります。
  • データ送信失敗時のリトライやローカル永続化がない場合、脆弱なネットワーク環境で問題の割合が過小評価される可能性があります。

公式リファレンス

フィードバック

このページは役に立ちましたか?