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标签的跳转链接做预加载用。

从图中可以看出:

  1. HTML/CSS 资源,其优先级是最高的
  2. font 字体资源,优先级分别为 Highest/High
  3. 图片资源,如果出现在视口中,则优先级为 High,否则为 Low

而 script 脚本资源就比较特殊,优先级不一,脚本根据它们在文件中的位置是否异步、延迟或阻塞获得不同的优先级:

  1. 网络在第一个图片资源之前阻塞的脚本在网络优先级中是 High
  2. 网络在第一个图片资源之后阻塞的脚本在网络优先级中是 Medium
  3. 异步/延迟/插入的脚本(无论在什么位置)在网络优先级中是 Low

webpack优化之preload和prefetch

单页面应用由于页面过多,可能会导致代码体积过大,从而使得首页打开速度过慢。所以切分代码,优化首屏打开速度尤为重要

但是所有的技术手段都不是完美的。当我们切割代码后,首屏的js文件体积减少了好多。但是也有一个突出的问题:

那就是当跳转其他页面的时候,需要下载相应页面的js文件,这就导致体验极其不好,每一次点击访问新页面都要等待js文件下载,然后再去请求接口获取数据。频繁出现loading动画的体验真的不好

所以如果我们在进入首页后,在浏览器的空闲时间提前下好用户可能会点击页面的js文件,这样首屏的js文件大小得到了控制,而且再点击新页面的时候,相关的js文件已经下载好了,就不再会出现loading动画。

动态引入js文件,实现code-splitting,减少首屏打开时间

按引入情况加载,只需添加注释即可

  • 代码分割注释:/*webpackChunkName: 'mp-supports'*/
  • prefetch注释:/* webpackPrefetch: true */

特殊用法

  1. preload 可以定义资源加载完毕后的回调函数,如下:
<link rel="preload" href="https://tiven.cn/js/test.js" as="javascript" onload="preloadHandle()">
  1. 可以使用preload的样式表立即生效。
<link rel="preload" href="demo.css" onload="this.rel=stylesheet">
  1. 对于加载跨域的资源,必须加上 crossorigin 属性。
<link rel="preload" as="style" crossorigin href="https://test.com/css/test.css">
  1. link标签还可以接收一个media属性,进行简单的媒体查询。
<link rel="preload" href="https://tiven.cn/img/bg.png" as="image" media="(max-width: 640px)">

学会preload和prefetch相关推荐

  1. 做前端性能优化,还不知道什么是Preload、Prefetch、Preconnect、Prerendering,你就out了?

    做前端性能优化,还不知道什么是Preload.Prefetch.Preconnect? 今天,我们将探讨当前的资源提示和指令,这是提高网站或 Web 应用程序性能的另一种好方法.您可能听说过Prelo ...

  2. 预加载属性 preload 与 prefetch 区别

    原文链接:https://waynegong.cn/posts/40528.html TLDR: preload 告诉浏览器立即加载资源; prefetch 告诉浏览器在空闲时才开始加载资源: pre ...

  3. webpack系统学习(六)打包分析,Preload和Prefetch

    1. 打包分析 我们需要在使用webpack的时候添加一些配置: webpack --profile --json > stats.json 这个配置会在打包完成之后生成一个stats.json ...

  4. Web性能优化之preload、prefetch

    基本用法 在网络请求中,我们在使用到某些资源比如:图片,JS,CSS 等等,在执行之前总需要等待资源的下载,如果我们能做到预先加载资源,那在资源执行的时候就不必等待网络的开销,这时候就轮到 prelo ...

  5. preload与prefetch对比

    前言 在preload和prefetch之前,我们一般根据编码需求通过link或者script标签引入页面渲染和交互所依赖的js和css等:然后这些资源由浏览器决定优先级进行加载.解析.渲染等. 然而 ...

  6. prefetch 和preload_webpack优化之preload和prefetch

    prefetch 这段代码告诉浏览器,这段资源将会在未来某个导航或者功能要用到,但是本资源的下载顺序权重比较低.也就是说prefetch通常用于加速下一次导航,而不是本次的. 被标记为prefetch ...

  7. 使用 Preload/Prefetch 优化

    <link rel="preload" href="myFont.woff2" as="font" type="font/w ...

  8. prefetch 和preload_使用 Preload/Prefetch 优化你的应用

    衡量网站的性能的指标有很多,其中有项重要的指标就是网站的首屏时间,为此前端工程师们都是绞尽脑汁想尽办法进行优化自己的应用,诸如像服务端渲染,懒加载,CDN 加速,ServiceWorker 等等方法, ...

  9. prefetch 和preload_prefetch和preload

    前面的话 基于VUE的前端小站改造成SSR服务器端渲染后,HTML文档会自动使用preload和prefetch来预加载所需资源,本文将详细介绍preload和prefetch的使用 资源优先级 在介 ...

最新文章

  1. const常量和readonly常量区别
  2. Interview:算法岗位面试—10.11下午—上海某公司算法岗位(偏数据分析,证券金融行业)技术面试考点之sqlserver语言相关考察点复习
  3. Seata 新特性,APM 支持 SkyWalking
  4. 3大常见光伏加盟骗局大起底
  5. ImageX instead of Ghost
  6. matlab如何画出来地球,matlab绘制地球
  7. springboot中设置pageSize的默认值
  8. 多元相关分析与回归分析(转)
  9. uniapp 二维码生成器 uQRCode
  10. ‘字符型‘变量和‘字符串型‘变量
  11. OpenCV快速傅里叶变换(FFT)用于图像和视讯流的模糊检测
  12. linux cadaver 命令,备份Linux操作系统的数据到坚果云的方法
  13. 计算机高中期末总结作文,高一期末总结作文(通用3篇)
  14. 40.微信小程序(API--基础、路由、缓存、媒体)
  15. 极企新品发布 缔造办公路由新贵
  16. 大学生计算机设计大赛 梧州学院,我校学子在2018年中国大学生计算机设计大赛中勇摘桂冠...
  17. 煤炭运销业务中作弊现象与防作弊措施
  18. 富士康小米们的印囧之路
  19. 一切都是为最好的准备------致所有正在找工作迷茫的你---------打不到的铜豌豆
  20. html图片纵向排列代码,竖向长方形图片横向正方形列表排列并取图片中间不变形的CSS方法...

热门文章

  1. 机器学习(十三)k-svd字典学习
  2. 技术人员谈管理之范围管理案例论文
  3. SqlSugar 5.联表查询
  4. BackSwap银行***利用三种全新技术清空银行帐户
  5. css中的显示于隐藏
  6. 俄军曾为救1名弹射飞行员 损失3架直升机阵亡5人
  7. 红米K30至尊纪念版和华为麦芒9哪个好 红米K30至尊纪念版和华为麦芒9对比
  8. vue 自定义组件 创建及其使用
  9. Melis交叉编译的库在链接时提示:xxx uses VFP register arguments xxx does not
  10. 借鉴《观沧海》作现代诗一篇