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 で試すことができます。ローカルで有効にするには、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 が確認しました。