配了三年视频会议,每次画质适配都要靠猜——今天 CPU Performance API 把这件事彻底变了
写过三年视频会议,每次进会都要靠经验猜画质——用户网络明明很好,但手机就是带不动那档高清。
根子不在网络,在浏览器从来不知道你的设备有几斤几两。
navigator.cpuPerformance 就是干这个的。
Chrome 152(stable 2026-08-25)把它放出来了。浏览器给设备打个分,返回一个 1~4 的整数:
- 1:基本跑不动视频通话
- 2:能跑,但开美颜就卡
- 3:主流旗舰,720p 加特效稳稳的
- 4:性能过剩,什么都能开
const tier = navigator.cpuPerformance; // 1 | 2 | 3 | 4 | 0(无法判断)
const presets = {
1: { video: 'QVGA', frameRate: 15, effects: [] },
2: { video: 'VGA', frameRate: 15, effects: ['voice-detection'] },
3: { video: '720p', frameRate: 30, effects: ['voice-detection', 'noise-reduction'] },
4: { video: '1080p', frameRate: 30, effects: ['voice-detection', 'noise-reduction', 'virtual-bg'] },
};
这个等级是静态的——买来就这样,不会因为当前负载变。但它解决了一个长期问题:以前你只能靠 userAgent 猜设备型号,现在浏览器直接告诉你它能承受多少。
有人会说:navigator.hardwareConcurrency 不是早就有了?对的,但它暴露的是核心数,一个 8 核低端机和 8 核旗舰机用起来完全不一样。CPU Performance API 的 4 个等级是浏览器实测的结果,不是规格表。
而且它不构成指纹风险——4 个等级的信息熵极低,用户还可以在 Chrome 设置里手动覆盖这个值。
但只靠静态等级还不够。视频会议这种场景,设备可能一开始跑得动,但开了虚拟背景之后 CPU 开始打满,这时候需要动态感知。
这就要说到 Compute Pressure API 了:
const observer = new PressureObserver((entries) => {
const state = entries[0].state; // 'nominal' | 'fair' | 'serious' | 'critical'
if (state === 'serious' || state === 'critical') {
downgradeQuality(); // 降码率/关特效
} else if (state === 'nominal') {
restoreQuality();
}
});
observer.observe('cpu', { sampleInterval: 1000 });
两者组合,才是完整的解法:
- CPU Performance API:冷启动时选一个初始预设(你设备能跑多高)
- Compute Pressure API:运行中实时感知压力,动态加减特效
Mintec(一家视频技术公司)已经在生产环境里用了这个组合。他们说真实数据出来后,p75~p95 的 INP 明显改善,入门机的首屏可交互时间缩短了。
Chrome 154(2026-09-09 stable)会把 CPU Performance API 推进为默认开启,功能上不会再有 flag 门槛。Safari 还没上,但 Chrome 覆盖率已经足够高,企业内网场景完全能用渐进增强。
下一步你现在就能做:
// 3 行判断,马上可以落地
const tier = navigator.cpuPerformance ?? 3; // 兜底 tier 3
if (tier <= 2) {
document.querySelector('.video-premium').disabled = true;
showTooltip('您的设备性能较低,已为您切换到流畅模式');
}
别再靠 userAgent 猜了。浏览器比你更清楚你的用户设备有几斤几两。
评论区
登录后可评论。