rel 关于性能优化的那些事儿

461 阅读2分钟

关于 rel 属性我们经常使用的莫过于 icon 以及 stylesheet 属性了, 工作中也遇到过 prefetch, preload, preconnect等字眼,虽然看到关键字也知道大概是做什么用的,但是一直缺乏总结,今天就安排一下

icon

网站图标,浏览器 Tab 页面左侧小 icon

<link rel="icon" href="favicon.ico">

stylesheet

样式表

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

dns-prefetch

DNS 预解析,在请求静态资源之前浏览器尝试解析域名

<link rel="dns-prefetch" href="https://www.google.com/" >

preload

资源预加载

<link rel="preload" href="myFont.woff2" as="font" type="font/woff2" crossorigin="anonymous">

<link rel="preload" href="style.css" as="style">
<link rel="preload" href="main.js" as="script">
<link rel="preload" href="sintel-short.mp4" as="video" type="video/mp4">

哪些资源可以被预加载?

  • audio: 音频文件
  • document: html文档
  • embed: 使用在 <embed> 标签上的资源
  • fetch: 可以通过 ajax 请求访问的资源,常见的有 JSON 文件
  • font: 字体文件
  • image: 图片
  • script: JavaScript 文件
  • style: CSS 样式表
  • track: WebVTT file.
  • worker: WebWorker 文件
  • video: 视屏文件

preconnect

预连接,获取所需资源的来源,启动 DNS 查找,TCP 握手和 TLS 协商

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

prefetch

用于标识下一个页面需要的资源, 当前页面不会生效,加载优先级比 preload

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

prerender

在后台呈现指定的网页,并将内容呈现在屏幕外

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

noopener

确保打开不受信任的链接时,他们无法通过 window.opener 属性篡改原始文档

<a href=help.html target=example rel="noopener noreferrer">Help!</a>

可能最后一个 noopener 跟性能没啥关系,但是我觉定还是把它列出来了,在你的网页中有跳转友情链接等无需双方通信的页面时,把这个属性加上。如果你不想让别人知道来源的话, 还可以加上 noreferrer