在過去一年中,Intel 與 Google 及其他人透過 Compute Pressure API 合作。在 Chrome 115 中,您可以註冊來源試用,以便測試這個新的 API。本篇文章將說明這個 API 的設計目的,以及如何使用這個 API。
問題
網路正成為重要的應用程式平台,透過新功能不僅可實現視訊會議等應用程式,還能為使用者帶來絕佳體驗。網路體驗可立即載入,可從任何地方存取,且無需預先安裝。
使用者希望應用程式可以快速載入並即時回應。他們也希望電池續航力能盡可能延長,並且希望裝置在運作時不會發出噪音,也不會過熱。在創造進階體驗的同時,要達到這些效果有時不太容易,因為流暢的動畫和背景影片模糊效果會消耗大量處理效能,導致硬體效能達到極限並耗盡電池電量。
此外,也可透過各種裝置存取網頁應用程式。即使使用相同版本的瀏覽器,五年舊的筆記型電腦與全新的電腦功能差異極大。
開發人員通常會選擇以最小公分母進行開發,避免使用會耗用較舊或效能較低裝置資源的功能。不過,如果可以為擁有合適裝置且處於適當環境的使用者提供最佳體驗,何不這麼做呢?舉例來說,透過手機加入視訊通話時,只是看到目前的揚聲器,可能會帶來最佳體驗。但在電腦上,看到通話中的所有人會是不錯的選擇 而硬體通常由工作組成為此,您需要使用實時硬體遙測資料,且不犧牲使用者的隱私權,以便安排工作,並逐步開啟和關閉功能,確保順暢的使用者體驗。這時,Compute Pressure API 就能派上用場。
什麼是 Compute Pressure API?
Compute Pressure API 提供高層級狀態,代表系統的壓力。這些高層級狀態可確保在隱私權 (不分享太多可識別使用者的特定資訊) 和開發人員可輕鬆推斷的資訊之間取得平衡。此外,這項功能還可讓實作使用正確的基礎硬體指標,確保系統在沒有難以管理的壓力下,使用者可以充分利用所有可用的處理能力。
舉例來說,現代 CPU 在單一核心或所有核心上,在大多數情況下都能以 100% 的使用率順利運作,因此將 80% 使用率硬編碼為關鍵的 API,可能會導致開發人員未充分利用硬體功能,並提供不理想的使用者體驗。另一方面,系統可能沒有適當的冷卻,或者環境溫度可能與夏天一樣高,甚至在達到高 CPU 使用率之前,系統也可能會進行節流。目前的 API 可處理全域 CPU 壓力,但我們打算嘗試在主執行緒和 worker 上啟用每個頁面的 CPU 壓力。
運算壓力有下列狀態:
- 名目:目前的工作負載造成最小壓力,讓系統以較低的時鐘頻率執行,以節省電力。
- 一般:系統運作正常,一切都順利,可以在沒有問題的情況下進行其他工作。
- 嚴重:系統有嚴重壓力,但可控管,且系統運作良好,但可能接近極限:
- 時脈速度 (視交流電或直流電而定) 持續維持在高水準。
- 熱力過高,但仍可控管,不會導致降速。
這時當您新增更多工作時,系統可能會進入重大狀態。
- 重要:系統即將達到限制,但尚未達到限制。關鍵並不代表系統主動受到限制,但這個狀態無法長期維持,如果工作負載維持不變,可能會發生節流限制。這個信號是網頁應用程式的最後呼叫 為減輕工作負載負擔
啟用 Compute Pressure API
根據預設,Chrome 不會啟用 Compute Pressure API,但您可以明確啟用這項功能,在 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 示範資料來源
特別銘謝
主圖片由 Robert Anasch 在 Unsplash 上建立。本文由 Rachel Andrew 和 Thomas Steiner 共同審查。