写在前面

本文首发于公众号:符合预期的CoyPan

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

<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的域名进行预解析。浏览器的支持情况也不错。

Preconnect

预链接。

使用方法如下:

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

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

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

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

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

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 workers
embed: 多媒体<embed>请求
object:  多媒体<object>请求
document: 网页

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

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

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

Prerender

预渲染。

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

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

浏览器的支持情况如下:

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的草案中查看:www.w3.org/TR/resource…

####Resource Hints使用方法

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

Link: <https://widget.com>; rel=dns-prefetch
Link: <https://example.com>; rel=preconnect
Link: <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);

Resource 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可以帮助我们提高页面的性能。但是这只是理论上的,真正的收益还需要在实际业务中去探索、验证。

符合预期。

转载于:https://juejin.im/post/5cf517f3f265da1bb13f1c92

link标签的几个用法,帮助提高页面性能相关推荐

  1. 【详细】HTML的Link标签的参数以及用法

    关于HTML的Link标签的参数以及用法 文章目录 关于HTML的Link标签的参数以及用法 charset href hreflang media rel rev sizes target type ...

  2. web前端开发,如何提高页面性能优化?

    web前端开发,如何提高页面性能优化? 内容方面 减少HTTP请求次数 减少DOM操作 减少DNS查询 使用Ajax 可缓存 css方面 把css样式HTML代码页的上端 从页面中分离css代码,从外 ...

  3. 互联网寒冬:一个月经历的所有面试题经验分享-------如何提高页面性能?

    前言   uu们,大家好,我是你们的前端小伙伴栗子,2年web前端开发经验.base成都.最近经过一系列的紧密结合的面试,成功的拿到了自己比较向往的offer.同时在面试的时候,也不断的总结了我在面试 ...

  4. html+link作用,html link标签有什么作用?html link标签的定义及属性介绍

    html link标签有什么作用?html link标签中定义及属性介绍,下面开始本章的内容,主要给大家说的是html link标签的定义和作用,还有HTML link标签的属性介绍及属性作用 htm ...

  5. 前端性能优化:如何提高页面加载速度和用户体验

    第一章:介绍 当今互联网时代,网站的性能对于用户体验至关重要.一个快速加载的网页不仅能提高用户的满意度,还能增加页面的转化率.而在前端开发中,性能优化是一个永恒的话题.本篇博客将为大家分享一些关于前端 ...

  6. 网页代码中link标签的用法

    link标签是我们在html中的一个基础标签,多用来在网页中引入外部的css文件,在这里我们一起来看一下这个标签在我们写代码是用到的写法. 1.引入外部css文件 <link href=&quo ...

  7. HTML中的link的简单介绍和用法

    <!DOCTYPE html> <html> <head>     <meta charset="utf-8">     <l ...

  8. a标签 rel=“external nofollow“ 用法

    NoFollow 是 Google 曾经提出的一个a新标签,目的是减少垃圾留言(例如米扑博客的留言:https://blog.mimvp.com/about#comments),解释当前页面与此留言链 ...

  9. 个人整理 HTML全部标签总集,及用法

    个人整理,资料来自HTML参考手册,应该是最全的的了 1.<!--...--> 定义注释 注释标签用于在源代码中插入注释.注释不会显示在浏览器中. 您可使用注释对您的代码进行解释,这样做有 ...

最新文章

  1. SQL工作笔记-达梦存储过程及时间触发器实现自动生成数据
  2. spacy model
  3. Unable to round-trip http request to upstream: EOF问题
  4. zepto 事件分析4(事件队列)
  5. C语言中 指针和数组
  6. ubuntu14.04安装vnc
  7. 【路径规划】基于matlab GUI粒子群算法机器人路径规划动画演示(手动设障)【含Matlab源码 924期】
  8. button css背景透明,css背景透明
  9. Matlab均值滤波去噪
  10. 软件工程--需求分析的任务详解
  11. 从零开始实现一个颜色选择器(原生JavaScript实现)
  12. 用于测试图片类型限制、图片大小限制的文件
  13. Numpy 笔记(二): 多维数组的切片(slicing)和索引(indexing)
  14. linux 取字符串的一部分,什么linux shell命令返回字符串的一部分?
  15. Visual studio之C#的一些常见问题
  16. 芬兰Vaisala温湿度变送器HMT330
  17. linux怎么让普通用户拥有管理员权限
  18. 计算机图形学绪论:感知、光、颜色和数学
  19. python自动化办公读后感_《Python编程快速上手——让繁琐的工作自动化》读书笔记3...
  20. 996加班骗局被揭穿,背后真相值得深思!

热门文章

  1. 关于使用 Python 析构函数的正确姿势
  2. 20190724算法题存档
  3. vue中align_Vue的简单Treeview组件,没有额外的依赖——VueTeatree
  4. (干货!)Tomcat性能优化
  5. Java消息中间件--JMS规范
  6. golang 的枚举
  7. go-callvis:Go调用关系图(call graph)
  8. centos6.5 python2.6.6升级到python2.7.15
  9. Dubbo服务引入原理
  10. 计算机专业个人能力评估,计算机应用专业毕业生个人自我评价