link标签的 preload、prefetch、preconnect

1,682 阅读2分钟

Preload

在浏览器的主渲染机制介入前就进行预加载,这一机制使得资源可以更早的得到加载并可用,且更不易阻塞页面的初步渲染,进而提升性能。

<head>
  <meta charset="utf-8">
  <title>JS and CSS preload example</title>

  <link rel="preload" href="style.css" as="style">
  <link rel="preload" href="main.js" as="script">

  <link rel="stylesheet" href="style.css">
</head>

<body>
  <h1>bouncing balls</h1>
  <canvas></canvas>
  <script src="main.js"></script>
</body>

许多不同类型的内容都可以被预加载,一些主要可用的as 属性值列举如下:

  • audio: 音频文件。
  • document: 一个将要被嵌入到[<frame>](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/frame)[<iframe>](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/iframe)内部的HTML文档。
  • embed: 一个将要被嵌入到[<embed>](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/embed)元素内部的资源。
  • fetch: 那些将要通过fetch和XHR请求来获取的资源,比如一个ArrayBuffer或JSON文件。
  • font: 字体文件。
  • image: 图片文件。
  • object: 一个将会被嵌入到[<embed>](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/embed)元素内的文件。
  • script: JavaScript文件。
  • style: 样式表。
  • track: WebVTT文件。
  • worker: 一个JavaScript的web worker或shared worker。
  • video: 视频文件。

Prefetch

空闲时预加载未来要使用的资源,优先级较低,最常用的是dns-prefetch

HTML: <link rel="prefetch" href="/uploads/images/pic.png">
HTTP Header: Link: </uploads/images/pic.png>; rel=prefetch

<link rel="dns-prefetch" href="//fonts.googleapis.com">
<link rel="dns-prefetch" href="//www.google-analytics.com"> 
<link rel="dns-prefetch" href="//opensource.keycdn.com">
<link rel="dns-prefetch" href="//cdn.domain.com">

Prerender

优化可能导航到的下一页上的资源的加载,prerender在后台渲染了整个页面,整个页面所有的资源

<link rel="prerender" href="https://www.keycdn.com">

Preconnect

允许浏览器在一个 HTTP 请求正式发给服务器前预先执行一些操作,建立与服务器的连接,这包括 DNS 解析,TLS 协商,TCP 握手,这消除了往返延迟并为用户节省了时间

dns-prefetch 和preconnect可以配合使用

<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin>
<link rel="dns-prefetch" href="https://fonts.gstatic.com/">

如果页面需要建立与许多第三方域的连接,则将它们预先连接会适得其反。 preconnect 提示最好仅用于最关键的连接。对于其他的,只需使用 即可节省第一步的时间-DNS查找。

参考文档