<link>标签的几个用法,帮助提高页面性能

本文涉及的产品
云解析DNS-重点域名监控,免费拨测 20万次(价值200元)
简介: <link>标签的几个用法,帮助提高页面性能

写在前面


HTML<link>元素规定了外部资源与当前文档的关系。最常见的用法,是用来链接一个外部的样式表,比如:


<link href="main.css" rel="stylesheet">


link标签还能做一些其他的事情,来帮助我们提高页面性能。


<link>标签的使用


来看一下link标签除了链接外部样式表之外的一些使用场景。

DNS Prefetch


DNS预解析。

这个大多数人都知道,用法也很简单:


<link rel="dns-prefetch" href="//example.com">


DNS解析,简单来说就是把域名转化为ip地址。我们在网页里使用域名请求其他资源的时候,都会先被转化为ip地址,再发起链接。dns-prefeth使得转化工作提前进行了,缩短了请求资源的耗时。


什么时候使用呢?当我们页面中使用了其他域名的资源时,比如我们的静态资源都放在cdn上,那么我们可以对cdn的域名进行预解析。浏览器的支持情况也不错。

640.jpg

Preconnect

预链接。

使用方法如下:


<link rel="preconnect" href="//example.com"><link rel="preconnect" href="//cdn.example.com" crossorigin>

我们访问一个站点时,简单来说,都会经过以下的步骤:


  1. DNS解析
  2. TCP握手
  3. 如果为Https站点,会进行TLS握手


使用preconnect后,浏览器会针对特定的域名,提前初始化链接(执行上述三个步骤),节省了我们访问第三方资源的耗时。需要注意的是,我们一定要确保preconnect的站点是网页必需的,否则会浪费浏览器、网络资源。

浏览器的支持情况也不错:

640.jpg

Prefetch

预拉取。

使用方法如下:


<link rel="prefetch" href="//example.com/next-page.html" as="document" crossorigin="use-credentials"><link rel="prefetch" href="/library.js" as="script">


link标签里的as参数可以有以下取值:


audio: 音频文件video: 视频文件  Track: 网络视频文本轨道 script: javascript文件style: css样式文件font: 字体文件   image: 图片   fetch: XHR、Fetch请求worker: Web workersembed: 多媒体<embed>请求 object:  多媒体<object>请求document: 网页

预拉取用于标识从当前网站跳转到下一个网站可能需要的资源,以及本网站应该获取的资源。这样可以在将来浏览器请求资源时提供更快的响应。


如果正确使用了预拉取,那么用户在从当前页面前往下一个页面时,可以很快得到响应。但是如果错误地使用了预拉取,那么浏览器就会下载额外不需要的资源,影响页面性能,并且造成网络资源浪费。


这里需要注意的是,使用了prefetch,资源仅仅被提前下载,下载后不会有任何操作,比如解析资源。


浏览器的支持情况如下:

640.jpg

Prerender

预渲染。


<link rel="prerender" href="//example.com/next-page.html">


prerender比prefetch更进一步。不仅仅会下载对应的资源,还会对资源进行解析。解析过程中,如果需要其他的资源,可能会直接下载这些资源。这样,用户在从当前页面跳转到目标页面时,浏览器可以更快的响应。

浏览器的支持情况如下:

640.jpg


Resource Hints

上面的四种用法,其实就是:Resource Hints

Resource Hints ,翻译过来是【资源提示】。w3c的概括为:


This specification defines the dns-prefetch, preconnect, prefetch, and prerender relationships of the HTML Link Element (<link>). These primitives enable the developer, and the server generating or delivering the resources, to assist the user agent in the decision process of which origins it should connect to, and which resources it should fetch and preprocess to improve page performance.

此规范定义HTML链接元素(<link>)的DNS预取、预连接、预取和预渲染关系。这些原语使开发人员和生成或传递资源的服务器能够帮助用户代理决定应该连接到哪个源,以及应该获取哪些资源,并进行预处理以提高页面性能。


更多详细内容,可以在w3c的草案中查看:https://www.w3.org/TR/resource-hints/


Resources Hints的使用方法

除了上面介绍的使用link标签的使用方法,还可以直接通过http header的方式使用。例如可以使用下面的header:


Link: <https://widget.com>; rel=dns-prefetchLink: <https://example.com>; rel=preconnectLink: <https://example.com/next-page.html>; rel=prerender;Link: <https://example.com/logo-hires.jpg>; rel=prefetch; as=image;


还可以在javascript使用:


var hint = document.createElement("link");hint.rel = "prefetch";hint.as = "document";hint.href = "/article/part3.html";document.head.appendChild(hint);


Resources Hints总结


上文介绍了DNS Prefetch,Preconnect, Prefetch,Prerender。这四种hint的功能逐渐递进:


  • Dns Prefetch进行DNS预查询。
  • Preconnect进行预链接。在一些重定向技术中,Preconnect可以让浏览器和最终目标源更早建立连接。
  • Prefetch进行预下载。比如说,我们可以根据用户行为猜测其下一步操作,然后动态预获取所需资源,并且不用担心该资源被解析(执行)而影响页面当前功能。
  • Prerender不仅仅提前下载资源,还会提前直接解析(执行)资源。如果我们对下一个页面进行Prerender,用户在打开下一个页面时,就会感觉很流畅了。


需要注意的是,浏览器对于Resource Hints的实现并不是想象中的那样简单直接。Resource Hints只是一些『提示』,浏览器可以采用我们的提示,但是具体怎么实现还是由浏览器自己来决定的。比如,如果当前CPU压力大,网络阻塞时,你使用了Prefetch,那么浏览器可能仅仅会只对dns进行预解析,并不会下载资源。


写在后面


本文介绍了link标签的四种使用方法,最终引出了Resource Hints的概念。Resource Hints可以帮助我们提高页面的性能。但是这只是理论上的,真正的收益还需要在实际业务中去探索、验证。


符合预期。

相关文章
|
存储 JavaScript 中间件
❤Nodejs 第十二章(图片存储接口-本地)
【4月更文挑战第12天】在Node.js第十二章中,主要讲解了错误中间件的编写和multer中间件的使用。错误中间件需置于所有路由之后,用于捕获并处理错误,防止接口崩溃。示例代码展示了如何处理token解析失败的错误。接着介绍了multer,它是处理multipart/form-data数据,尤其是用于文件上传的中间件。通过`yarn add --save multer`安装,并引入到项目中。最终,成功实现了图片上传并返回了可访问的图片路径。
271 2
|
12月前
|
人工智能 移动开发 前端开发
WeaveFox:蚂蚁集团推出 AI 前端智能研发平台,能够根据设计图直接生成源代码,支持多种客户端和技术栈
蚂蚁团队推出的AI前端研发平台WeaveFox,能够根据设计图直接生成前端源代码,支持多种应用类型和技术栈,提升开发效率和质量。本文将详细介绍WeaveFox的功能、技术原理及应用场景。
6164 68
WeaveFox:蚂蚁集团推出 AI 前端智能研发平台,能够根据设计图直接生成源代码,支持多种客户端和技术栈
|
Java Maven 编译器
Java编译器注解运行和自动生成代码问题之@AutoService工作问题如何解决
Java编译器注解运行和自动生成代码问题之@AutoService工作问题如何解决
584 1
|
NoSQL 前端开发 MongoDB
[保姆级教程]Windows安装MongoDB教程
【6月更文挑战第4天】该内容是关于MongoDB的安装包下载及安装步骤指南。首先,访问网址 &lt;a href=&quot;https://www.mongodb.com/try&quot; target=&quot;_blank&quot;&gt;https://www.mongodb.com/try&lt;/a&gt; 进入官网,选择MongoDB Community Edition(社区版)。接着,挑选合适的版本和系统平台,推荐下载zip压缩包。下载后,进行安装,依次点击“Next”同意协议,选择自定义安装路径,然后继续安装直至完成。
1577 0
|
存储 NoSQL MongoDB
MongoDB使用方法
MongoDB使用方法
456 2
|
缓存 安全 应用服务中间件
Web安全-HTTP Host头攻击
Web安全-HTTP Host头攻击
915 7
Threejs制作大海效果
这篇文章详细介绍了使用Three.js制作大海效果的技术细节,包括创建水面模型、应用波纹纹理以及实现动态波浪效果的方法。
392 0
阿里云app备案服务号在哪看
【10月更文挑战第11天】阿里云app备案服务号在哪看
561 1
|
编解码 测试技术 Android开发
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
本文详细介绍了如何利用CameraX库实现高质量的照片及视频拍摄功能,包括添加依赖、初始化、权限请求、配置预览与捕获等关键步骤。此外,还特别针对不同分辨率和帧率的视频拍摄提供了性能优化策略,确保应用既高效又稳定。
1537 1
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能