第二次試用 Compute 壓力來源試用

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

過去一年來,Intel 與 Google 及 Google 的 Compute Pressure API 合作。在 Chrome 115 中,您可以註冊來源試用,協助測試這個新的 API。本文將說明這個 API 旨在解決的問題以及使用方法。

問題所在

網路正逐漸成為主要的應用程式平台,提供視訊會議等多種應用程式的新功能,可讓使用者享受愉快的使用體驗。網頁式體驗會立即載入,而且可從任何地方存取,且不需預先安裝。

使用者想要快速載入、回應回應的應用程式。此外,他們也希望能盡可能延長電池續航力,以及不會使用時不會過熱的靜音裝置。如果要同時打造進階體驗,有時也很難實現,因為流暢的動畫和背景影片模糊效果會佔用大量的處理能力,讓硬體達到極限,並消耗電池電力。

此外,有多種裝置可用來存取網頁應用程式。即使執行了相同的瀏覽器版本,五年的舊筆電仍和全新桌上型電腦截然不同。

開發人員通常會選擇以最低通用的分母進行開發,避免使用某些功能會使舊款或裝置能力較差。然而,如果有能力為裝置提供功能,且環境適切的使用者,能夠從中獲益,那麼該怎麼做呢?舉例來說,透過手機加入視訊通話時,只看到目前的揚聲器可能是最佳體驗。不過,在電腦上,如果能看到通話中的每個人都會很開心,而硬體通常是由工作決定。為了達成這個目標,您需要在不犧牲使用者隱私的前提下,採用即時硬體遙測技術,可用於安排工作及逐步開啟和關閉功能,確保提供流暢的使用者體驗。這時 Compute Pressure API 就能派上用場

什麼是 Compute 壓力 API?

Compute Pressure API 可以提供代表系統壓力的高階狀態。這些概略狀態可確保隱私權 (請勿分享過多可識別使用者身分的具體資訊) 與開發人員可輕鬆推理的資訊之間取得良好平衡。此外,只要系統不易管理的壓力,該工具也能讓實作使用正確的基礎硬體指標,確保使用者能夠充分運用自身可用的所有處理能力。

舉例來說,現代 CPU 在大部分情況下可在單一核心或所有核心中,讓 100% 的使用率都能正常運作,因此,如果 API 將 80% 使用率視為關鍵問題,可能會導致開發人員未充分利用硬體功能,也無法提供最佳的使用者體驗。另一方面,系統可能沒有適當的冷卻,或是環境溫度可能會與夏季一樣高,且即使在達到高 CPU 使用率之前,系統也可能會進行過熱保護。目前的 API 適用於全球 CPU 壓力,但我們計劃嘗試在整個主執行緒和工作站中啟用每個頁面的 CPU 壓力。

運算壓力具有下列狀態:

  • 重要:目前的工作負載導致最小壓力,以較低的時鐘頻率執行系統來節省電力。
  • 一般:系統運作正常;所有功能都很順利,而且可以順利執行其他工作,沒有問題。
  • 嚴重:系統承受了幾項嚴重壓力,但系統變得易於管理。系統運作良好,但可能即將達到上限:
    • 時脈速度 (視 AC 或 DC 電源而定) 會一直保持高。
    • 溫度偏高,但仍可控制,不會造成節流。

如果此時您新增更多工作,系統可能會進入重大狀態。

  • 重大:系統現在即將達到限制,但尚未達到限制。關鍵值並不代表系統正在進行主動調節,但長期執行時,此狀態無法永續經營,如果工作負載保持不變,則可能會導致過熱。這個信號是網頁應用程式最後一次呼叫的方式,藉此減輕工作負載。

啟用 Compute Pressure API

根據預設,Chrome 不會啟用 Compute Pressure API,但您可以明確啟用這項功能,在 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 上提出問題,並附上建議和問題。

特別銘謝

主頁橫幅是由 Robert Anasch 在 Unsplash 網站上建立。本文由 Rachel AndrewThomas Steiner 審查。