提问人:Gert 提问时间:7/28/2021 最后编辑:myfGert 更新时间:11/18/2023 访问量:1555
你应该使用带有样式表的 preconnect 吗?
Should you use preconnect with stylesheets?
问:
当您想包含来自 Google Fonts 的字体时,它建议 ([1]) 您这样做:
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto&display=swap">
预连接到 fonts.gstatic.com 是有意义的,因为浏览器只有在下载样式表后才会发现该域。但是,当样式表的链接紧跟在样式表之后时,预连接对 fonts.googleapis.com 有什么意义呢?浏览器不会同时处理这两个吗?
[1] 请参阅:https://fonts.google.com/share?selection.family=Roboto,选择某种样式,然后单击💼右上角的公文包图标。
答:
启动早期连接(包括 DNS 查找、TCP 握手和可选的 TLS 协商)允许用户代理掩盖建立连接的高延迟成本。大多数浏览器都支持预连接,并提高了 Google 字体的性能。
评论
通过与 https://fonts.googleapis.com 进行预连接,网页正在优化字体样式表本身的加载。正如谷歌文档:
<link rel="preconnect">
通知浏览器您的页面打算与另一个源建立连接,并且您希望该过程尽快开始。
性能提升可能可以忽略不计,因为样式表本身通常很小,所以我不确定为什么默认包含它。但是,从技术上讲,它仍然会做一些事情。我建议删除它,因为它对加载时间没有影响。
用于外部域,尤其是页面将从中获取资源的域,可以通过减少与建立连接相关的延迟来提高性能。preconnect
评论
与 rel of 的链接与样式表本身无关。preconnect
<link rel="preconnect">
将为任何未来的跨域 HTTP 请求、导航或子资源提供好处。
预连接通过抢先执行部分或全部握手(HTTP 为 DNS+TCP,HTTPS 源为 DNS+TCP+TLS)来加速给定源的未来加载。
在此处阅读完整文档: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/preconnect
评论
preconnect
font.googleapis.com
font.googleapis.com
但是,当 fonts.googleapis.com 预连接时,预连接的意义何在 样式表的链接紧随其后?
我宁愿同意在您的代码示例中,好处将是最小的,但与该 css 主机的连接将更早开始。浏览器按顺序解析 HTML,这个预连接链接可以获得一些真正的利润,尤其是当您在预连接链接和谷歌 css 链接之间放置其他外部 css 链接时。因此,谷歌不知道你的网站结构,并在大多数情况下给你“良好实践”代码。
不会浏览器 同时处理这两者?
没有。资源提取将重用浏览器池中的当前预连接状态。我认为这是很常见的情况,因为预连接作业 - DNS解析,TCP连接和TLS协商 - 可能需要很长时间(数十毫秒甚至更多)。
一些相关链接:
下一个:如何实现粘性水平滚动的表头
评论
preconnect
preconnect