学会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标签的跳转链接做预加载用。
从图中可以看出:
- HTML/CSS 资源,其优先级是最高的
- font 字体资源,优先级分别为 Highest/High
- 图片资源,如果出现在视口中,则优先级为 High,否则为 Low
而 script 脚本资源就比较特殊,优先级不一,脚本根据它们在文件中的位置是否异步、延迟或阻塞获得不同的优先级:
- 网络在第一个图片资源之前阻塞的脚本在网络优先级中是 High
- 网络在第一个图片资源之后阻塞的脚本在网络优先级中是 Medium
- 异步/延迟/插入的脚本(无论在什么位置)在网络优先级中是 Low
webpack优化之preload和prefetch
单页面应用由于页面过多,可能会导致代码体积过大,从而使得首页打开速度过慢。所以切分代码,优化首屏打开速度尤为重要。
但是所有的技术手段都不是完美的。当我们切割代码后,首屏的js文件体积减少了好多。但是也有一个突出的问题:
那就是当跳转其他页面的时候,需要下载相应页面的js文件,这就导致体验极其不好,每一次点击访问新页面都要等待js文件下载,然后再去请求接口获取数据。频繁出现loading动画的体验真的不好
所以如果我们在进入首页后,在浏览器的空闲时间提前下好用户可能会点击页面的js文件,这样首屏的js文件大小得到了控制,而且再点击新页面的时候,相关的js文件已经下载好了,就不再会出现loading动画。
动态引入js文件,实现code-splitting,减少首屏打开时间
按引入情况加载,只需添加注释即可
- 代码分割注释:/*webpackChunkName: 'mp-supports'*/
- prefetch注释:/* webpackPrefetch: true */
特殊用法
- preload 可以定义资源加载完毕后的
回调函数
,如下:
<link rel="preload" href="https://tiven.cn/js/test.js" as="javascript" onload="preloadHandle()">
- 可以使用
preload
的样式表立即生效。
<link rel="preload" href="demo.css" onload="this.rel=stylesheet">
- 对于加载跨域的资源,必须加上
crossorigin
属性。
<link rel="preload" as="style" crossorigin href="https://test.com/css/test.css">
link
标签还可以接收一个media
属性,进行简单的媒体查询。
<link rel="preload" href="https://tiven.cn/img/bg.png" as="image" media="(max-width: 640px)">
学会preload和prefetch相关推荐
- 做前端性能优化,还不知道什么是Preload、Prefetch、Preconnect、Prerendering,你就out了?
做前端性能优化,还不知道什么是Preload.Prefetch.Preconnect? 今天,我们将探讨当前的资源提示和指令,这是提高网站或 Web 应用程序性能的另一种好方法.您可能听说过Prelo ...
- 预加载属性 preload 与 prefetch 区别
原文链接:https://waynegong.cn/posts/40528.html TLDR: preload 告诉浏览器立即加载资源; prefetch 告诉浏览器在空闲时才开始加载资源: pre ...
- webpack系统学习(六)打包分析,Preload和Prefetch
1. 打包分析 我们需要在使用webpack的时候添加一些配置: webpack --profile --json > stats.json 这个配置会在打包完成之后生成一个stats.json ...
- Web性能优化之preload、prefetch
基本用法 在网络请求中,我们在使用到某些资源比如:图片,JS,CSS 等等,在执行之前总需要等待资源的下载,如果我们能做到预先加载资源,那在资源执行的时候就不必等待网络的开销,这时候就轮到 prelo ...
- preload与prefetch对比
前言 在preload和prefetch之前,我们一般根据编码需求通过link或者script标签引入页面渲染和交互所依赖的js和css等:然后这些资源由浏览器决定优先级进行加载.解析.渲染等. 然而 ...
- prefetch 和preload_webpack优化之preload和prefetch
prefetch 这段代码告诉浏览器,这段资源将会在未来某个导航或者功能要用到,但是本资源的下载顺序权重比较低.也就是说prefetch通常用于加速下一次导航,而不是本次的. 被标记为prefetch ...
- 使用 Preload/Prefetch 优化
<link rel="preload" href="myFont.woff2" as="font" type="font/w ...
- prefetch 和preload_使用 Preload/Prefetch 优化你的应用
衡量网站的性能的指标有很多,其中有项重要的指标就是网站的首屏时间,为此前端工程师们都是绞尽脑汁想尽办法进行优化自己的应用,诸如像服务端渲染,懒加载,CDN 加速,ServiceWorker 等等方法, ...
- prefetch 和preload_prefetch和preload
前面的话 基于VUE的前端小站改造成SSR服务器端渲染后,HTML文档会自动使用preload和prefetch来预加载所需资源,本文将详细介绍preload和prefetch的使用 资源优先级 在介 ...
最新文章
- const常量和readonly常量区别
- Interview:算法岗位面试—10.11下午—上海某公司算法岗位(偏数据分析,证券金融行业)技术面试考点之sqlserver语言相关考察点复习
- Seata 新特性,APM 支持 SkyWalking
- 3大常见光伏加盟骗局大起底
- ImageX instead of Ghost
- matlab如何画出来地球,matlab绘制地球
- springboot中设置pageSize的默认值
- 多元相关分析与回归分析(转)
- uniapp 二维码生成器 uQRCode
- ‘字符型‘变量和‘字符串型‘变量
- OpenCV快速傅里叶变换(FFT)用于图像和视讯流的模糊检测
- linux cadaver 命令,备份Linux操作系统的数据到坚果云的方法
- 计算机高中期末总结作文,高一期末总结作文(通用3篇)
- 40.微信小程序(API--基础、路由、缓存、媒体)
- 极企新品发布 缔造办公路由新贵
- 大学生计算机设计大赛 梧州学院,我校学子在2018年中国大学生计算机设计大赛中勇摘桂冠...
- 煤炭运销业务中作弊现象与防作弊措施
- 富士康小米们的印囧之路
- 一切都是为最好的准备------致所有正在找工作迷茫的你---------打不到的铜豌豆
- html图片纵向排列代码,竖向长方形图片横向正方形列表排列并取图片中间不变形的CSS方法...