Intel は過去 1 年間、Compute Pressure API に関して Google やその他の関係者と協力してきました。Chrome 115 では、オリジン トライアルに登録してこの新しい API をテストできます。この投稿では、この API で解決できる問題と、その使用方法について説明します。
問題
ウェブは主要なアプリケーション プラットフォームになりつつあり、新しい機能によってビデオ会議などのアプリケーションを実現できるだけでなく、ユーザーにとって快適なエクスペリエンスを実現しています。ウェブベースのエクスペリエンスは瞬時に読み込まれ、どこからでもアクセスでき、事前にインストールする必要はありません。
ユーザーは、読み込みが速く、応答性に優れたアプリケーションを求めています。また、バッテリー駆動時間や、触りにくいサイレント デバイスにもできるだけ長持ちさせたいとも考えています。滑らかなアニメーションや背景動画のぼかし処理では大量の処理能力が使用され、ハードウェアの限界に達し、バッテリーの消耗が早くなるため、高度なエクスペリエンスを作成する場合も、このようなことを実現するのが困難な場合があります。
さらに、ウェブ アプリケーションへのアクセスに使用されるデバイスは多種多様です。5 年前のノートパソコンは、同じバージョンのブラウザを実行している場合でも、新しいデスクトップ パソコンとは機能が大きく異なります。
デベロッパーは多くの場合、最も古い公約数に基づいて開発し、古いデバイスや性能の低いデバイスに負担がかかる機能の使用を避けます。しかし、対応機器を所有し、適切な環境にいるユーザーがその恩恵を受けることができるようにエクスペリエンスを最適化できるのであれば、そのようにしてはどうでしょうか。たとえば、スマートフォンからビデオ通話に参加する場合、現在のスピーカーを表示するのが最適です。デスクトップでは、通話の参加者全員が表示されると便利です。また、ハードウェアは通常、タスクに対応しています。これを実現するには、ユーザーのプライバシーを犠牲にすることなく、タスクのスケジュールや機能の段階的なオンとオフの切り替えに使用できるライブ ハードウェア テレメトリーが必要です。これにより、スムーズなユーザー エクスペリエンスを実現できます。ここで役立つのが Compute Pressure API です
Compute Pressure API とは
Compute Pressure API は、システムに対するプレッシャーを表す高レベルの状態を提供します。このような大まかな状態により、プライバシー(ユーザーを特定する可能性のある具体的な情報を共有しすぎない)と、デベロッパーが容易に推測できる情報との適切なバランスが保証されます。また、実装で基盤となる適切なハードウェア指標を使用できるため、システムに管理不可能な負荷がかからない限り、ユーザーは利用可能なすべての処理能力を利用できます。
たとえば、最新の CPU は、単一コアまたはすべてのコアで、ほとんどの場合、使用率 100% で正常に動作するように設計されているため、使用率 80% を重要としてハードコードする API では、デベロッパーはハードウェアの機能を十分に活用できず、最適なユーザー エクスペリエンスを提供できない可能性があります。一方、システムの冷却が適切に行われていなかったり、夏のように気温が非常に高く、CPU 使用率が高くなったりする前に、システムがスロットリングすることがあります。現在の API はグローバルな CPU 負荷で動作しますが、メインスレッドとワーカー全体でページあたりの CPU 負荷を有効にすることをテストする予定です。
コンピューティング プレッシャーには次の状態があります。
- 公称: 現在のワークロードによって最小限の圧力が発生しているため、システムがより低いクロック周波数で動作し、電力を節約できるようになっています。
- 普通: システムは正常に動作しています。すべてがスムーズで、追加の作業を問題なく実行できます。
- 重大: システムにある程度のプレッシャーがあるものの、管理は可能で、システムは正常に動作していますが、限界に近づいている可能性があります。
- クロック速度(AC 電源または DC 電源に応じて)が常に速い。
- 高温は高いものの、管理可能であり、スロットリングの原因にはなっていません。
この時点でさらに作業を追加すると、システムがクリティカル状態に移行することがあります。
- 重大: システムはまもなく上限に達しますが、まだ上限に達していません。重大とは、システムが積極的にスロットリングされているということではありませんが、この状態は長期的に持続できず、ワークロードが同じままである場合にスロットリングが発生する可能性があります。このシグナルは、ウェブ アプリケーションのワークロードを軽減するための最後の呼び出しです。
Compute Pressure API を有効にする
Compute Pressure API は Chrome ではデフォルトで有効になっていませんが、Chrome 115 で明示的に有効にすると、この API を試すことができます。enable-experimental-web-platform-features
フラグを有効にすると、ローカルで有効にできます。
現在、オリジン トライアルが進行中で、Chrome 118(2023 年 7 月 18 日)で終了する予定です。トライアルに参加するには、登録して、元のトライアル トークンを含むメタ要素を HTML または HTTP ヘッダーに含めます。詳細については、オリジン トライアルのスタートガイドをご覧ください。
コンピューティング プレッシャーを確認する
次のコード スニペットは、コンピューティング プレッシャーの変化をモニタリングして対処する方法を示しています。
// The `records` parameter is a sequence of records between two
// consecutive callbacks. Currently it contains ten entries, but
// this is an implementation detail.
function callback(records) {
const lastRecord = records.pop();
console.log(`Current pressure ${lastRecord.state}`);
if (lastRecord.state === 'critical') {
// Reduce workers load by 4.
} else if (lastRecord.state === 'serious') {
// Reduce workers load by 2.
} else {
// Do not reduce.
}
}
const observer = new PressureObserver(callback, {
// Sample rate in Hertz.
sampleRate: 1,
});
observer.observe('cpu');
次のコード スニペットは、iframe から Compute Pressure API を使用する方法を示しています。
<iframe src="https://mysite.com/" allow="compute-pressure">
<script>
// Use Compute Pressure API.
</script>
</iframe>
プラットフォーム サポート
Compute Pressure API は、Linux、ChromeOS、macOS、Windows の Chrome 115 で利用できます。
デモ
以下のデモで、人工的な圧力に基づいてコンピューティングの圧力状態がどのように変化するかを確認してください。
ご利用のブラウザが API をサポートしていない場合のために、次の動画でデモの録画をご覧ください。
フィードバック
この段階では、デベロッパーからのフィードバックは非常に重要であるため、提案や質問を GitHub で問題を報告してください。
役に立つリンク
- 一般公開の説明動画
- 仕様
- Chromium トラッキング バグ
- ChromeStatus.com のエントリ
- TAG の確認
- テストの目的
- Compute Pressure API のデモ | Compute Pressure API のデモソース
謝辞
ヒーロー画像は Unsplash で Robert Anasch によって作成されました。この記事は、Rachel Andrew と Thomas Steiner によってレビューされました。