Chrome 85 现已开始向稳定版推出。
以下是您需要知晓的相关信息:
- 您可以使用
content-visibility: auto提高渲染性能。 - 现在可以在 CSS 中设置 CSS 属性。
- 您现在可以使用
getInstalledRelatedApps()检查 Windows 应用或 PWA 是否已安装。 - 应用图标快捷方式也适用于 Windows(这次是真的)。
fetch上传流式传输的源试用已开始。- 以及更多。
我是 Pete LePage,目前在家工作和拍摄视频。接下来,我们一起来看看 Chrome 85 中面向开发者的最新功能!
内容可见性
将 HTML 转换为用户可以看到的内容,需要浏览器先完成多个步骤,然后才能绘制第一个像素。而且,它会针对整个网页(包括视口中不可见的内容)执行此操作。
将 content-visibility: auto 应用于元素,会告知浏览器可以跳过该元素的渲染工作,直到该元素滚动到视口中,从而提供更快的初始渲染。
.my-class {
content-visibility: auto;
}
如需充分发挥 content-visibility 的作用,请将其应用于具有更复杂的布局算法(例如 flexbox 和 grid)或具有包含自身布局的子元素的父部分。

通过将内容分块并添加 content-visibility: auto;,此网页的渲染时间从 232 毫秒缩短到了 30 毫秒。
请查看内容可见性,了解如何使用它来提升渲染性能。
@property 和 CSS 变量
CSS 变量(技术上称为“自定义属性”)非常棒。借助 Houdini CSS 属性和值 API,您可以为自定义属性定义类型和默认回退值。我之前在Chrome 78 中的新功能中介绍了它们,当时我们添加了在 JavaScript 中定义它们的支持。
从 Chrome 85 开始,您还可以直接在 CSS 中定义和设置 CSS 属性。我喜欢 CSS 属性的一点是,它赋予了属性语义含义、回退值,甚至可以进行 CSS 测试。
@property --colorPrimary {
syntax: '<color>';
initial-value: magenta;
inherits: false;
}
Una 有一篇很棒的博文@property:为 CSS 变量赋予超能力,其中介绍了如何使用这些变量。
获取已安装的相关应用
借助 getInstalledRelatedApps() API,您可以检查您的应用是否已安装,然后自定义用户体验。
例如,如果您的应用已安装,则在着陆页上向用户显示不同的内容。将重叠的功能集中在一个应用中,以避免混淆。或者,如果您的原生应用已安装,则不宣传 PWA 的安装。
在 Chrome 80 中首次推出时,它仅适用于 Android 应用。现在,在 Android 上,它还可以检查 PWA 是否已安装。并且在 Windows 上,它可以检查您的 Windows UWP 应用是否已安装。
const relatedApps = await navigator.getInstalledRelatedApps();
relatedApps.forEach((app) => {
console.log(app.id, app.platform, app.url);
});
请参阅我的文章应用是否已安装?getInstalledRelatedApps() 会告诉您!
在 web.dev 上了解其运作方式,以及如何对应用进行签名以证明其归您所有。
应用图标快捷方式
在 Chrome 84 中,我们添加了对应用图标快捷方式的支持。我不小心说它们在所有平台上都可用,但实际上它们只在 Android 上可用。 现在,在 Chrome 85 中,它们已可在 Android 和 Windows 上使用,并且在 Chrome 和 Edge 中均可使用。
"shortcuts": [
{
"name": "Open Play Later",
"short_name": "Play Later",
"description": "View the list you saved for later",
"url": "/play-later",
"icons": [
{ "src": "//play-later.png", "sizes": "192x192" }
]
}
]
如需了解完整详情,请参阅 web.dev 上的应用图标快捷方式一文。对于由此造成的困惑,我深感抱歉。
源试用:使用 fetch() 发出流式请求
从 Chrome 85 开始,fetch 上传流式传输功能以来源试用版的形式提供。它允许您在请求正文准备就绪之前开始提取。以前,您只有在准备好整个正文后才能开始发送请求。但现在,即使您仍在生成内容,也可以开始发送内容。
const { readable, writable } = new TransformStream();
const responsePromise = fetch(url, {
method: 'POST',
body: readable,
});
例如,使用它来预热服务器,或者在从麦克风或摄像头捕获音频或视频时进行流式传输。
Jake 在 web.dev 上发表的使用 Fetch API 流式传输请求一文中对此进行了深入探讨,并在最新的 HTTP203 - 使用 Fetch 流式传输请求视频中也对此进行了介绍。
等等
当然,还有很多其他功能。
Promise.any 会返回一个 promise,该 promise 会因第一个已完成或遭拒的指定 promise 而完成或遭拒。
try {
const first = await Promise.any(arrayOfPromises);
console.log(first);
} catch (error) {
console.log(error.errors);
}
借助 .replaceAll(),您可以更轻松地替换字符串中的所有实例,而无需再使用正则表达式!
const myName = 'My name is Bond, James Bond.'
.replaceAll('Bond', 'Powers')
.replace('James', 'Austin');
console.log(myName);
// My name is Powers, Austin Powers.
Chrome 85 新增了对 AVIF 的解码支持。AVIF 是一种由 Alliance for Open Media 标准化的图片格式,采用 AV1 编码。与 JPEG 和 WebP 相比,AVIF 可显著提高压缩率,Netflix 最近的一项研究显示,与标准 JPEG 相比,AVIF 可节省 50% 的空间,而对于 4:4:4 内容,则可节省 60% 以上的空间。
深入阅读
以上仅涵盖了部分重要亮点。如需了解 Chrome 85 中的其他变更,请点击以下链接。
- Chrome 开发者工具的新变化 (85)
- Chrome 85 中的弃用和移除
- Chrome 85 的 ChromeStatus.com 更新
- Chrome 85 中的 JavaScript 新变化
- Chromium 源代码库更改列表
订阅
如果您想及时了解我们的视频动态,请订阅我们的 Chrome Developers YouTube 频道,这样每当我们发布新视频时,您都会收到电子邮件通知。
我是 Pete LePage,我终于剪头发了!
Chrome 86 发布后,我会立即在此处告诉您 Chrome 中的新变化!