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. HDU 5115 Dire Wolf ——(区间DP)
  2. DIV+CSS到底是什么?
  3. boost::hana::equal用法的测试程序
  4. MS SQL 排序规则总结
  5. 浅析C#发送短信的原理
  6. 微软 Windows11 Build 22000.71 更新(KB5004252)发布
  7. html如何将设置文本效果,css如何对文本进行修饰
  8. 产品经理:论项目计划有多重要?——软件项目管理
  9. 米莱狄机器人怎么那么多_王者荣耀米莱狄攻略,团战技能好了就丢,操作最简单上分法师...
  10. 数值分析方阵的QR分解
  11. 利用apache 的PropertyUtilsBean 实现map和pojo相互转换
  12. 监听input框值得改变
  13. java面试题整理(二)
  14. 戴尔服务器r720u盘装系统,DELL R720服务器U盘安装操作系统指南
  15. 计算机上机考试的系统,计算机上机考试系统
  16. 虚拟机VM 安装CoreOS
  17. 多多客id是什么意思_【拼多多】关于多多客比价行为规范解释说明
  18. 使用osgeo的GDAL获取tiff文件坐标
  19. 使用C++模拟动态密码验证
  20. 修复pd16虚拟机在big sur 的usb无法使用和无法联网问题!

热门文章

  1. 通讯协议(2)—— SPI
  2. 梯度下降法的三种解释(BGD,SGD,MBGD).
  3. Android IT新闻阅读器与手机二维码
  4. 成都工业职业技术学校计算机,成都市计算机工业职业技术学校2021年招生简介...
  5. Ubuntu学习(一)
  6. Centos7/8中Gearman的安装与使用
  7. 基于AD Event日志监测域内信息探测行为
  8. Symbian S60 Camera
  9. JMeter循环控制器的使用
  10. 《MATLAB 神经网络43个案例分析》:第43章 神经网络高效编程技巧——基于MATLAB R2012b新版本特性的探讨