前端新特性:Compute Pressure API!!!

news2024/12/23 0:06:04

前几天,review 同事代码的时候发现了一个新的 JS API PressureObserver。 

通过一番搜索,发现这个 API 是 Compute Pressure API 的一部分。 

Compute Pressure API:https://www.w3.org/TR/compute-pressure/

它的作用是可以观察 CPU 的变化。

这有什么用呢?

举个例子:如果你在一个具有视频会议功能的网站上跟别人开会,会议里的人都开着摄像头。那么你的设备的 CPU 压力就会很大,因为它需要处理很多视频流。如果网站不能根据 CPU 的压力动态调整远端视频流的分辨率,那么这个网站就会出现使用卡顿,甚至出现网站崩溃的现象。

如果有了这个 API,那么这个问题不就迎刃而解了吗?

细心的读者应该已经发现了,我给出的这个 API 的链接是 W3C 的,而不是 MDN 的。

是因为这个 API 还没有被 W3C 标准化,目前还处于草案阶段,所以 MDN 上也没有相关的文档。

那么有必要去了解这个 API 吗?毕竟它还没有被标准化。

我认为是有必要的。因为它的出现,意味着我们可以给用户带来更好的体验。

我们先来看一下这个 API 的 demo。

Compute Pressure API demo:https://w3c.github.io/compute-pressure/demo/

前置条件
  • 使用 Chrome 浏览器

  • Chrome 浏览器版本 >= 115

如果满足前置条件,那么 demo API Status 的值是 enabled。

首先我们点击 Start 按钮,此时 Pressure 的状态是 nominal。

nominal 表示 CPU 的压力正常

图片

增加 1 个 worker 并开启模拟,此时 Pressure 的状态是 Fair。

fair 表示 CPU 的压力正常,但是有一些任务正在运行

图片

增加到 6 个 worker 的时候,Pressure 的状态开始变为 Serious。

serious 表示 CPU 的压力严重,但是仍然可以正常工作

图片

增加到 8 个 worker 的时候,Pressure 的状态变为 Critical。

critical 表示 CPU 的压力非常严重,无法正常工作

图片

Use-Cases

体验了 demo 之后,我们知道了 Compute Pressure API 可以实时反映 CPU 的压力。

那么我们可以在什么场景下使用这个 API 呢?

相信大家对 WebRTC 不会陌生,WebRTC 是 Web Real-Time Communication 的缩写。Real-Time 的意思是实时,而 Compute Pressure API 的能力也是实时反映 CPU 的压力。

所以,这个 API 在 WebRTC 应用的场景可以用来:

  • 动态调整视频流的质量和数量

  • 选择性的开启或关闭虚拟背景,滤镜,降噪等功能

  • 等等

如何使用 Compute Pressure API

首先满足前置条件。

然后注册 Compute Pressure 的 origin trial。

依次填入表单中的信息,然后点击 Register 按钮。

图片

注意这里的 Web Origin 需要填写 https 或 http。

注册完成后,你会得到一个 token。

然后在你的网站中添加以下 meta 标签:

 <meta http-equiv="origin-trial" content="copy from your token" />

这样你就可以在你的网站中使用 Compute Pressure API 了。为了避免 token 过期,你可以添加以下防御性代码:

 if ("PressureObserver" in globalThis) {
   // Use PressureObserver interface
 }

细心的读者应该发现我这里用了 globalThis,因为 PressureObserver 可以在 worker 使用。

实际上,PressureObserver 支持在以下 contexts 使用:

  • DedicatedWorker

  • SharedWorker

  • Window

图片

我们试着创建一个 PressureObserver 实例:

 const observer = new PressureObserver(
   (changes) => {
     /* ... */
   },
   {
     sampleRate: 0.5,
   }
 );

当然你也可以不指定 sampleRate,默认值是 1。

sampleRate 的单位是 Hz,表示每秒采样的次数。

举个例子如果 sampleRate 是 0.5,那么就是每 2 秒采样一次。

这里有一个坑点,如果你的 sampleRate 设置为 2 但系统最多只能提供 1 Hz 的采样频率,那么最终 PressureObserver 的采样频率就是 1 Hz。

我们之前在 demo 中看到那个 emoji 表情随着 worker 数量的增加而发生变化,前提是 PressureObserver 的 observer 了 cpu:

 observer.observe("cpu");

实际上,PressureObserver 还可以观察 thermals(散热)。

但是现在 Chrome 只支持 cpu,可以用 PressureObserver 的静态方法 supportedSources 判断:

 console.log(PressureObserver.supportedSources());

图片

取消 observer 也很简单:

 observer.unobserve("cpu");

同样,如果你也可以使用:

 observer.disconnect();

取消所有的 observer,但现在 Chrome 还不支持 thermals,这个方法的便利性还没有体现出来。

实际上我测试下来 PressureObserver 的 callback 函数的参数虽然是一个数组,但是数组的长度始终是 1。

 const observer = new PressureObserver((changes) => {
   // changes.length 始终为 1
 });

虽然数据结构有点奇怪,但这并不妨碍我们使用这个 API。

 const observer = new PressureObserver((changes) => {
   switch (changes[0].state) {
     case "nominal": {
     }
     case "fair": {
     }
     case "serious": {
     }
     case "critical": {
     }
     default: {
     }
   }
 });

我们之前介绍了 PressureObserver 的 unobserver 与 disconnect 方法,那么细心的你可能注意到了,如果调用这些方法的时候 cpu 的压力发生了变化怎么办?

PressureObserver 的 takeRecords 方法考虑到了这个问题:

图片

在 disconnect 前通过调用这个方法获取到 cpu 压力的变化。

总结

PressureObserver API 属于 Compute Pressure API 的一部分,它可以实时反映 CPU 的压力,未来还可以反映散热的压力。

开发者可以通过监听 CPU 的变化动态调整视频流的质量和数量,选择性的开启或关闭虚拟背景等行为提升用户体验。

PressureObserver 的 API 使用起来非常简单,还考虑到了一些边界情况,比如在调用 unobserver 或 disconnect 方法的时候 CPU 的压力发生了变化,这时候可以通过 takeRecords 方法获取到压力的变化。

虽然现在 PressureObserver 只能通过 origin trial 开启,但是我相信它很快就会被标准化,让我们一起期待吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1098410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yolov8如何进行训练验证推理

1、新建脚本main.py&#xff0c;也可以建一个yaml文件&#xff08;避免改到default.yaml&#xff09;&#xff0c;这个yaml文件是在训练时用到 batchsize什么的都可以在yaml文件改&#xff0c;这俩东西不用填 2、两种训练的方法&#xff0c;用的时候可以注释掉其他 from u…

【无标题】三分钟快速实现MQTT网关远程连接三菱系列PLC

MQTT协议网关串口连接三菱FX3UPLC操作说明v1.2 目录 一. 使用流程 二. 准备工作 2.1 需要准备如下物品 2.2 LF220网关准备工作 2.3 PLC准备工作 2.4 电脑的准备工作 2.5 MQTT服务器准备工作 三. 腾讯云平台配置步骤 3.1 创建产品 3.2 添加设备 3.3 获取…

Python 中的变量Variable

六、Python 中的变量 1、变量的创建和赋值 在 Python 程序中,变量是用一个变量名表示,可以是任意数据类型,变量名必须是大小写英文、数字和下划线(_)的组合,且不能用数字开头,比如: a=88这里的 a 就是一个变量,代表一个整数,注意一点是 Python 是不用声明数据类型…

h5端自动滑动轮播效果实现

一、客户需要的效果图 二、具体代码实现如下&#xff1a; dom:<div class"swiper-container"> <div class"swiper-wrapper ul" click"setInputText"> <div class"swiper-slide li" v-for"(item, index) in answe…

如何使用内网穿透实现U8用友ERP本地部署并远程访问办公?

文章目录 前言1. 服务器本机安装U8并调试设置2. 用友U8借助cpolar实现企业远程办公2.1 在被控端电脑上&#xff0c;点击开始菜单栏&#xff0c;打开设置——系统2.2 找到远程桌面2.3 启用远程桌面 3. 安装cpolar内网穿透3.1 注册cpolar账号3.2 下载cpolar客户端 4. 获取远程桌面…

HarmonyOS/OpenHarmony原生应用开发-华为Serverless服务支持情况(四)

文档中的TS作者认为就是ArkTS之意。 一、云存储 AppGallery Connect&#xff08;简称AGC&#xff09;云存储是一种可伸缩、免维护的云端存储服务&#xff0c;可用于存储图片、音频、视频或其他由用户生成的内容。借助云存储服务&#xff0c;您可以无需关心存储服务器的开发、…

尾菜变宝、苹果富硒:青年学子秀农研成果 拼多多以赛促研助乡村振兴

青年兴则国兴&#xff0c;青年强则国强。一批新时代中国青年&#xff0c;仍保持着“自找苦吃”的精气神&#xff0c;冬天凿冰、夏天抗暑&#xff0c;以科技小院为依托&#xff0c;在服务三农建设中“解民生、治学问”。 10月14日&#xff0c;“中国研究生乡村振兴科技强农创新…

如何把视频压缩变小?

如何把视频压缩变小&#xff1f;大家都知道&#xff0c;视频一般都伴随着很大的文件体积&#xff0c;&#xff1a;尤其是现在的视频大多是高清晰度的&#xff0c;因此视频文件的体积就更加的大&#xff0c;视频体积太大会给我们带来很多的不便&#xff0c;主要是以下这几点&…

【Linux】Ubuntu美化bash【教程】

【Linux】Ubuntu美化bash【教程】 文章目录 【Linux】Ubuntu美化bash【教程】1. 查看当前环境中是否有bash2. 安装Synth-Shell3. 配置Synth-Shell4. 取消greeterReference 1. 查看当前环境中是否有bash 查看当前使用的bash echo $SHELL如下所示 sjhsjhR9000X:~$ echo $SHELL…

8、docker 安装 nginx

1、下载镜像 docker pull nginx 2、本机创建目录 1&#xff09;创建nginx挂载目录 mkdir /usr/local/nginx 2&#xff09;进入nginx目录 cd /usr/local/nginx 3&#xff09;创建 www和logs目录 mkdir -p www logs 3、创建nginx容器 此容器用于复制配置文件&#xff0c;复…

Unity中Shader的深度写入ZWrite

文章目录 前言一、更新深度缓冲区中值二、深度值的写入操作只有两个选择 开启 和 关闭ZWrite OnZWrite Off 三、深度写入在半透明物体物体中开启的情况1、特效一般都需要关闭深度写入2、如果在人物模型上使用 特效半透明 的 Shader&#xff0c;为了不出现模型自身穿透问题&…

首次建站用香港服务器有影响没?

​  对于首次租用香港服务器的朋友来说&#xff0c;难免会对它没有一个很清晰的认知。因此&#xff0c;本文就从香港服务器适用人群&#xff0c;以及建站影响&#xff0c;选择技巧上做一个全方位的解答。 1. 哪一类人群适合使用香港服务器建站? 做外贸业务的网站。香港走的国…

40. 到达目的地的最短距离(第四期模拟笔试)

链接&#xff1a;卡码网KamaCoder 题目&#xff1a; 样例&#xff1a; 输入 3 输出 3 思路&#xff1a; 这道题是求最少步数&#xff0c;联想一下 BFS&#xff0c;BFS 操作可得 这是一个正向的 BFS #include <iostream> #include <cstring> #include <algo…

atlas运维中遇到的问题

1、java.lang.NoClassDefFoundError&#xff1a;javax/ws/rs/core/Link$Builder 主要原因&#xff1a;jsr311-api包中javax.ws.rs.core包中没有Link类&#xff0c;而Atlas以HBase作为元数据存储&#xff0c;HBase本身使用的为javax.ws.rs-api包中的core包&#xff0c;其中有Lin…

【论文阅读】基于卷积神经的端到端无监督变形图像配准

&#x1f4d8;End-to-End Unsupervised Deformable ImageRegistration with a Convolutional NeuralNetwork &#x1f4d5;《基于卷积神经的端到端无监督变形图像配准》 文章目录 摘要 Abstract. 1.导言 Introduction 附录 References未完待续 to be continued ... 摘要 Abstr…

大龄、零基础,想转行做网络安全。怎样比较可行?

随着互联网行业的发展&#xff0c;网络安全问题得到了越来越的重视。国家工信部和发改委对网络安全行业的支持政策也越来越好&#xff0c;致使网络安全的需求越来越大。随着“新基建”在各个领域的深入开展&#xff0c;网络安全产业成为保障“新基建”安全的重要基石。 需求越…

雷电模拟器上使用第一个frida(五)用python实现逆向分析并模拟登陆以及两篇好用文章adb devices出现emulator-5554 offline的解决方案和Frida Hook方法大全

上篇通过hook确定了登录代码的位置&#xff0c;参考雷电模拟器上使用第一个frida&#xff08;四&#xff09;第一个HOOK之抓包-CSDN博客 接下来逆向分析一下&#xff0c;并用python实现其功能&#xff0c;并模拟登陆。 通过抓包分析&#xff0c;其实只要找到riskSecret如何生…

虹科产品丨HK-TrueNAS SCALE可使用公共云存储

HK- TrueNAS SCALE 用户现在可以用 AWS、Azure 和 GCP 的一小部分成本获得公共云存储。 提供NAS软件的虹科 iXsystems公司正在与StorJ合作&#xff0c;利用StorJ的分散式云存储提供全球分布式存储&#xff08;GDS&#xff09;服务&#xff0c;作为主要公共云的低成本替代品。该…

正向代理(流量代理)

文章目录 正向代理与反向代理流量转发工具环境准备reGeorg 正向代理与反向代理 正向代理是客户端和其他所有服务器&#xff08;重点&#xff1a;所有&#xff09;的代理者 反向代理是客户端和所要代理的服务器之间的代理。 流量转发工具 需要放在拿到shell的服务器上可使用 …

WorkPlus企业内部聊天软件,如何保障企业数据和信息的安全性?

大家好&#xff0c;今天我要和大家分享的是企业内部聊天软件&#xff0c;也就是我们常说的IM软件。随着企业内部沟通和协作的需求不断增长&#xff0c;越来越多的企业开始关注如何选择一款最适合自身需求的企业内部聊天软件。在众多选择中&#xff0c;WorkPlus作为领先的品牌&a…