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 变量赋予超级能力,其中介绍了如何使用 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 是一种使用 AV1 编码且由 Alliance for Open Media 标准化的图片格式。与 JPEG 和 WebP 相比,AVIF 可显著提高压缩率。最近的 Netflix 研究表明,与标准 JPEG 相比,AVIF 可将文件大小缩减 50%,对于 4:4:4 内容,可将文件大小缩减超过 60%。
深入阅读
本文仅介绍了一些主要亮点。如需了解 Chrome 85 中的其他变更,请点击以下链接。
- Chrome 开发者工具 (85) 中的新变化
- Chrome 85 弃用和移除的功能
- ChromeStatus.com 上有关 Chrome 85 的更新
- Chrome 85 中的 JavaScript 新变化
- Chromium 源代码库更改列表
订阅
如需及时了解我们的最新视频,请订阅我们的 Chrome Developers YouTube 频道,这样每当我们发布新视频时,您就会收到电子邮件通知。
我是 Pete LePage,我终于剪了头发!
一旦 Chrome 86 发布,我会立即向您介绍 Chrome 中的新变化!