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