一步一步学会preload和prefetch

preload和prefetch是什么?

  我们常说的preload和prefetch,是link标签rel里新增的两种值,用于让浏览器提前加载指定的资源,它们会先被缓存(属于http cache缓存),达到优化网页速度的目的。

本文将以代码示例的形式一步步讲解preload和prefetch。

1.准备四个文件:index.html,index.js,prefetch.js,preload.js

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>preload prefetch</title>
  <link rel="stylesheet" href="index.css">
  <link rel="preload" href="preload.js" as="script">  <!--  新增  -->
</head>
<body>
<script src="index.js"></script>
<script src="preload.js"></script>
</body>
</html>

index.js

console.log('index')

preload.js

console.log('preload')

prefetch.js

console.log('prefetch')

2.运行一下页面,想象一下页面的网络加载顺序,可以看到结果:

 

3.把准备好的preload.js以preload形式插入index.html

注意:不要漏掉as属性,它用来指定预加载的资源类型,没有as属性会导致浏览器发出警告<link rel=preload> must have a valid `as` value

这时候再观察浏览器的请求顺序,会发现preload.js的加载比index.js提前了,甚至比index.css还要提前。

再看控制台输出的执行结果:

这说明preload会把资源加载的优先级提高。

在这个过程里,preload会先预加载好preload.js资源,但是不会立即执行,等到script标签引入preload.js的时候才会执行。

preload除了可以加载js文件,还可以加载很多其他类型的问题,只要改变as的值即可,比如style,image,font,video,一样可以起到改变加载优先级的作用。

4.修改index.html代码,引入prefetch.js

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4   <meta charset="UTF-8">
 5   <title>preload prefetch</title>
 6   <link rel="stylesheet" href="index.css">
 7   <link rel="preload" href="preload.js" as="script">
 8   <link rel="prefetch" href="prefetch.js">  <!--  新增  -->
 9 </head>
10 <body>
11 <script src="index.js"></script>
12 <script src="preload.js"></script>
13 </body>
14 </html>

再次观察现在的网络加载的情况

可以看到虽然prefetch的link标签位置很高,但是prefetch.js的加载优先级并不高。

再看一下控制台输出

控制台输出并没有变,说明prefetch.js并未执行。

可以看出prefetch的优先级比较低,它主要用于预加载本页面未来可能加载到的资源或者跳转到的页面。

所以src里除了填写js文件地址,也可以是网址,为a标签的跳转链接做预加载用。

原文地址:https://www.cnblogs.com/zhishaofei/p/11840770.html