在过去一年中,Intel 一直在与 Google 和其他方就 Compute Pressure API 展开合作。在 Chrome 115 中,您可以注册源试用来帮助测试这个新 API。本文将介绍该 API 旨在解决的问题,并展示如何使用它。
问题
随着新功能的推出,网络正成为一个关键的应用平台,不仅让视频会议等应用成为可能,还能为用户带来愉悦的体验。基于 Web 的体验可即时加载,可从任何位置访问,且无需预先安装。
用户希望应用能够快速加载并及时响应。他们还希望尽可能地延长电池续航时间,以及尽可能避免设备过热。在同时打造高级体验时,有时很难实现这些目标,因为流畅的动画和背景视频模糊处理会消耗大量的处理能力,使硬件达到极限并耗尽电池电量。
此外,用户使用各种设备访问 Web 应用。一台使用了五年的笔记本电脑与一台全新的台式机相比,其功能会大不相同,即使它们运行的是相同的浏览器版本也是如此。
开发者通常会选择针对最低共通点进行开发,避免使用会给旧款或性能较低的设备带来负担的一些功能。不过,如果能够为拥有强大设备且处于合适环境的用户优化体验,为什么不这样做呢?例如,通过手机加入视频通话时,只看到当前发言者可能是最佳体验。不过,在桌面设备上,能够看到通话中的所有人会很不错,而且硬件通常能够胜任此任务。为了实现这一点,您需要在不牺牲用户隐私的情况下进行实时硬件遥测,将其用于调度任务以及逐步开启和关闭功能,以确保流畅的用户体验。这时,Compute Pressure API 可以派上用场。
什么是 Compute Pressure API?
Compute Pressure API 提供表示系统压力的高级状态。这些概要状态可确保在隐私保护(不会分享过多可识别用户身份的特定信息)与开发者可以轻松推断的信息之间实现良好平衡。此外,它还允许实现使用正确的底层硬件指标,以确保只要系统未处于不可管理的压力下,用户就可以充分利用可用的所有处理能力。
例如,现代 CPU 在大多数情况下可在单个核心或所有核心上以 100% 的利用率正常运行,因此将 80% 的利用率硬编码为关键的 API 可能会导致开发者未充分利用硬件的功能,从而导致用户体验不佳。另一方面,系统可能没有得到适当的冷却,或者夏季的环境温度可能非常高,系统甚至在达到较高的 CPU 利用率之前就可能开始节流。当前的 API 可处理全局 CPU 压力,但我们计划尝试跨主线程和工作器为每个页面启用 CPU 压力。
计算压力有以下状态:
- 正常:当前工作负载造成的压力极小,系统可以以较低的时钟频率运行以节省电量。
- 一般:系统运行良好;一切运行正常,可以顺利完成额外工作。
- 严重:系统存在一些严重压力,但可控,系统运行良好,但可能接近其极限:
- 时钟速度(取决于交流电源或直流电源)始终很高。
- 热级别较高,但仍可控,且不会导致节流。
此时,如果您添加更多工作,系统可能会进入严重状态。
- 严重:系统现在即将达到其限制,但尚未达到限制。“严重”并不意味着系统正在积极节流,但这种状态无法长期维持,如果工作负载保持不变,可能会导致节流。此信号是 Web 应用减轻工作负载的最后一次调用。
启用 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 演示源代码
致谢
主打图片由 Robert Anasch 在 Unsplash 上创建。本文由 Rachel Andrew 和 Thomas Steiner 审核。