Compute Pressure API

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

注意:此功能在 Web Workers 中可用,但 Service Workers 除外。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

Compute Pressure API 是一項 JavaScript API,可讓您觀察系統資源(如 CPU)的壓力。

用例

在即時應用程式(例如視訊會議 Web 應用)中,Compute Pressure API 可以讓您檢測系統當前面臨的壓力。系統會盡其所能處理任何壓力,但系統與應用程式之間的協作有助於最好地處理壓力。此 API 會通知您高級別的壓力狀態變化,以便您可以調整工作負載,同時仍提供令人愉悅的使用者體驗。當系統壓力趨勢上升或緩解時,會主動傳遞訊號,以便及時適應。

例如,您可以使用這些壓力變化訊號來降低或提高影片質量,或減少同時顯示的影片流數量,以避免影片幀丟失、音訊中斷或應用程式其他關鍵部分延遲。您的 Web 應用的服務質量可能會發生變化,這也會由於外部因素和應用程式在意外時間帶來的壓力,但理想情況下,這不會導致系統完全崩潰、輸入延遲或無響應。相反,啟用的功能集及其質量水平會與終端使用者裝置的資源壓力進行平衡。這類似於網路壓力,在這種情況下,流媒體應用會適應可用的頻寬。

更多用例包括:

  • Web 遊戲,您可以平衡 3D 資源的質量和數量、更改幀率、解析度、景深等,以確保低延遲和穩定的幀率。
  • 使用者介面,在系統壓力較大時,您可以渲染佔位符而不是真實資料,並在壓力緩解後渲染真實內容。

概念與用法

快速且令人愉悅的 Web 應用程式應在系統計算資源(接近)滿負荷使用時平衡工作負載。Compute Pressure API 的目標是防止,而不是緩解 Web 應用本身以及使用者裝置出現糟糕的使用者體驗,使其不會過熱、過吵或以不可接受的速度耗盡電池。因此,建議優先使用此 API,而不是反饋機制或單一的效能調整(例如,透過降低 window.requestAnimationFrame 的頻率),這些機制可能會緩解糟糕的使用者體驗,但無法主動避免。對於事後衡量和細分使用者會話的效能,PerformanceLongTaskTiming API 更適合分析佔用 UI 執行緒 50 毫秒或更長時間的任務(另請參閱 Performance API 以獲取其他效能測量 API)。

壓力源型別

在您的 Web 應用或網站中,不同的任務都在爭奪不同處理單元(CPU、GPU 和其他專用處理單元)的處理時間。Compute Pressure API 規範的當前版本定義了兩種主要源型別,可以進行查詢以收集壓力資訊:

  • "thermals" 代表整個系統的全域性熱量狀態。
  • "cpu" 代表所有核心的中央處理單元 (CPU) 的平均壓力。這種狀態可能會受到除觀察站點之外的其他應用和站點的影響。

支援的源列表因瀏覽器、作業系統和硬體而異,並且仍在不斷發展。使用靜態的 PressureObserver.knownSources 提示來檢視您的瀏覽器可用的源型別。請注意,可用性也可能因您的作業系統和硬體而異。呼叫 observe() 並檢查 NotSupportedError 以檢視壓力觀測是否可行。

Compute Pressure API 在以下上下文中可用:

壓力狀態

Compute Pressure API 暴露了高級別的壓力狀態,這些狀態抽象了系統瓶頸的複雜性,而這些複雜性無法透過處理器時鐘速度和利用率等低階指標充分解釋。事實上,CPU 利用率指標通常具有誤導性。因此,Compute Pressure API 使用以下含義的人類可讀壓力狀態(另請參閱規範):

  • "nominal":目標裝置的狀況處於可接受水平,對使用者沒有明顯的不利影響。
  • 🟢 "fair":目標裝置的壓力、溫度和/或能源消耗略有升高,可能導致電池續航時間縮短,以及風扇(或帶風扇的系統)啟動併發出聲音。除此之外,目標裝置執行正常,可以承擔額外的工作。
  • 🟡 "serious":目標裝置的壓力、溫度和/或能源消耗持續高度升高。系統可能正在節流以作為減少熱量的對策。
  • 🔴 "critical":目標裝置或系統的溫度顯著升高,需要冷卻以避免任何潛在問題。

上述壓力狀態的促成因素(即底層系統指標)不由規範定義,並且可能因底層硬體和平臺行為而異。但是,規範要求促成因素的變化必須是實質性的,以避免狀態之間的頻繁切換。這意味著您可以預期 API 不會過於頻繁地報告不同的狀態,因為它們不是響應單一的波動系統指標。

安全和隱私注意事項

Compute Pressure API 由 "compute-pressure" 指令策略控制。其預設允許列表是 'self',允許在同源巢狀框架中使用,但阻止第三方內容使用該功能。

參考

介面

Compute Pressure API 包含以下介面,並且 API 表面類似於其他觀察器,例如 IntersectionObserverMutationObserverPerformanceObserver

PressureObserver Experimental

當系統壓力在預定義的取樣間隔內針對指定數量的源(例如,CPU)發生變化時發出通知。

PressureRecord

描述過渡時刻的壓力趨勢。

Permissions-Policy 指令

Permissions-Policycompute-pressure 指令

控制對 Compute Pressure API 的訪問。

示例

記錄當前壓力

此示例建立了一個 PressureObserver,並在每次壓力變化時採取行動。取樣間隔設定為 1000 毫秒,這意味著最多每秒會有一次更新。

js
function callback(records) {
  const lastRecord = records[records.length - 1];
  console.log(`Current pressure ${lastRecord.state}`);
  if (lastRecord.state === "critical") {
    // disable video feeds
  } else if (lastRecord.state === "serious") {
    // disable video filter effects
  } else {
    // enable all video feeds and filter effects
  }
}

try {
  const observer = new PressureObserver(callback);
  await observer.observe("cpu", {
    sampleInterval: 1000, // 1000ms
  });
} catch (error) {
  // report error setting up the observer
}

規範

規範
計算壓力級別 1
# the-pressureobserver-object

瀏覽器相容性

另見