Long Task API - nagutabby/senior-thesis GitHub Wiki

概要

  • 参考: https://github.com/w3c/longtasks/blob/main/README.md
  • アプリの応答性を測定できるようにする新しいRUM(Real User Meacurement)パフォーマンスAPI
  • UIスレッドを長期間専有し、他の重要なタスクの実行をブロックする長いタスクを検出できる

背景

  • ページの読み込み中やユーザーがページを操作している間、アプリとWebブラウザーの両方が様々なイベントをキューに入れ、Webブラウザーがそれを実行
  • ユーザーエージェントはユーザーのアクティビティに基づいて入力イベントをスケジュールし、アプリはrequestAnimationFrameやその他のコールバックをスケジュールする
    • これらのイベントはキューに入るとWebブラウザーによって1つずつデキューされて実行される
  • 一部のタスクは長時間かかる場合があり、そのような場合にはUIスレッドがロックされ、他の全てのタスクもブロックされる
    • これは通常、Webブラウザーがユーザー入力に応答できないロックされたページとして確認できる
    • Web上でのユーザー体験の低下の主な原因である
    • インタラクティブまでの時間の遅延、入力遅延の増加/不安定化、イベント処理遅延の増加/不安定化、不安定なアニメーションとスクロールを引き起こす
  • 一部のアプリやRUMベンダーは、既に長いタスクが発生するケースを特定して追跡しようとしている
    • 例えば、既知のパターンの1つは、短い定期タイマーをインストールし、連続する呼び出し間の経過時間を検査することである
      • 経過時間がタイマーに設定されている時間よりも長い場合は、1つ以上の長いタスクによってタイマーの実行が遅れている可能性が高くなる
      • これはほとんどの場合は機能するが、いくつかのパフォーマンスに悪影響を及ぼす
      • アプリは長いタスクを検出するためにポーリングし、アプリの静止(quiescence)や(requestidlecallbackなどの)長いアイドルブロックを中断させる
      • バッテリーの寿命に悪影響を及ぼす
      • 遅延を引き起こしているコードがファーストパーティーのものなのか、あるいはサードパーティーのものなのか、などの情報を得られないため、遅延の原因を知る方法がない
  • RAILパフォーマンスモデルによれば、アプリはユーザー入力に対して100ミリ秒未満で応答する必要がある