Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >性能优化必知preload 和 prefetch

性能优化必知preload 和 prefetch

作者头像
前端黑板报
发布于 2021-03-24 05:49:31
发布于 2021-03-24 05:49:31
1.5K00
代码可运行
举报
文章被收录于专栏:前端黑板报前端黑板报
运行总次数:0
代码可运行

点击上方蓝色字体,关注我们

今天我们来探索一下前端资源的一些指令以及它们如何来提高网站性能的。你应该听过 preload 和 prefetch,但这次我们想深挖它们之间的不同以及如何受益于它们。它们允许开发者优化资源的传递时间、缩短往返次数等。

preload:

preload 是一个新的 Web 标准,在页面生命周期中提前加载你指定的资源,同时确保在浏览器的主要渲染机制启动之前。这样就可以保证了其不会阻止浏览器的渲染并提前加载资源以此来提高性能。通常使用 preload 是用来加载图片、CSS、JavaScript和字体文件。preload 的语法和加载 CSS 类似:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<link rel="stylesheet" href="styles/main.css"> // 加载CSS

除了要把 rel 改为 preload ,同时还要指定 as 属性,下面是一个简单的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<head>
  <meta charset="utf-8">
  <title>JS and CSS preload example</title>

  <link rel="preload" href="style.css" as="style">
  <link rel="preload" href="main.js" as="script">

  <link rel="stylesheet" href="style.css">
</head>

<body>
  <h1>bouncing balls</h1>
  <canvas></canvas>

  <script src="main.js" defer></script>
</body>

使用 as 来指定资源的类型可以使浏览器:

  • 更加精确地确定资源加载的优先级。
  • 将其存储在缓存中以备将来使用,并在适当时重用资源。
  • 将正确的内容安全策略应用于资源。
  • 为其设置正确的 Accept 请求标头。

preload 支持如下资源的加载:

audio、document、embed、fetch、font、image、object、script、style、track、worker、video(浏览器暂未实现)

若你加载了一个 CORS 开启的资源,必须要加上 crossorigin 属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<link rel="preload" href="https://example.com/fonts/font.woff" as="font" crossorigin>

除了使用 html 标签来使用 preload,还可以使用如下方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
var res = document.createElement("link");
res.rel = "preload";
res.as = "style";
res.href = "styles/other.css";
document.head.appendChild(res);
</script>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Link: <https://example.com/other/styles.css>; rel=preload; as=style

preload 的浏览器支持情况如下:

注意:

1.浏览器使用 preload 加载资源的时候并没有执行里面的代码。比如 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//myscript.js
alert(1)
<link rel="preload" href="myscript.js" as="script">

当使用浏览器加载时,并不会有弹窗。

2. 若此时发生页面导航,preload 进行中的资源会被取消。

浏览器中如下:

prefetch:

prefetch 是提示浏览器,用户在下次导航时可能会使用的资源,因此浏览器为了提升性能可以提前加载、缓存资源。prefetch 的加载优先级相对较低浏览器在空闲的时候才会在后台加载。

使用方式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<link rel="prefetch" href="/myscript.js" as="script">
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
var res = document.createElement("link");
res.rel = "prefetch";
res.as = "style";
res.href = "styles/other.css";
document.head.appendChild(res);
</script>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Link: <https://example.com/other/styles.css>; rel=prefetch; as=style

相对于 preload 而 prefetch 应用在一个不同的场景:跨导航、跨页面使用资源,例如页面 A 初始化了一个页面 B 中关键资源的 prefetch 请求,则关键资源的加载和页面导航可以并行执行,但若是 preload 它会在页面 A 的unload 事件中立即取消。

prefetch 的浏览器支持情况:

注意:

1. prefetch 优先级较低,所以加载的资源有可能会被取消,例如:在网络很差的时候,prefetch 一个大字体文件的时候就有可能被取消。

浏览器中如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端黑板报 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
什么是 Preload、Prefetch 和 Preconnect?
今天我们将研究一下能显著提升页面性能的方法 —— 资源提示与指令。你也许听说过 preload,prefetch 和 preconnect,可是我们想研究的更深一点,搞清他们之间的区别并且充分的利用它们。它们带来的好处包括允许前端开发人员来优化资源的加载,减少往返路径并且在浏览页面时可以更快的加载到资源。
前端黑板报
2019/12/11
6.2K0
用 preload 预加载页面资源
本文主要介绍preload的使用,以及与prefetch的区别。然后会聊聊浏览器的加载优先级。
ConardLi
2019/09/23
2.1K0
用 preload 预加载页面资源
前端优化 之 preload
Preload的原理是在浏览器解析HTML文档时,提前加载页面所需的关键资源,如样式表、脚本文件和字体等。
Chester Chen
2024/03/25
2470
前端优化 之 preload
仅需 5 分钟,快速优化 Web 性能的10 个手段
作者:Marc 译者:前端小智 来源:dev 本人已经过原作者制授权翻译。 在这篇文章中,主要介绍10种快速提高网站性能的方法,你只需5分钟内就可以将它应用到你的网站上,废话不多说,让我们进入正题吧
前端小智@大迁世界
2020/10/28
9200
仅需 5 分钟,快速优化 Web 性能的10 个手段
Web 性能优化:Preload,Prefetch的使用及在 Chrome 中的优先级
今天,我们将深入研究Chrome 的网络栈,以明确 web 加载原语(如<link rel= preload > & <link rel= prefetch >) 背后的工作原理,以便你能够更有效地使用它们。
前端小智@大迁世界
2019/04/18
2.5K0
Web 性能优化:Preload,Prefetch的使用及在 Chrome 中的优先级
快速优化 Web 性能的10 个手段
优化网站的性能需要花费大量的时间,并且如果要根据自己的需求进行优化则花费的时间可能更多。
疯狂的技术宅
2020/09/01
2.1K0
快速优化 Web 性能的10 个手段
Preload与Prefetch的区别以及webpack项目中如何优化
<link rel="preload" href="/path/to/style.css" as="style">
周陆军
2021/06/26
6K0
使用 Preload&Prefetch 优化前端页面的资源加载
对于前端页面来说,静态资源的加载对页面性能起着至关重要的作用。本文将介绍浏览器提供的两个资源指令-preload/prefetch,它们能够辅助浏览器优化资源加载的顺序和时机,提升页面性能。
2020labs小助手
2020/11/11
1.5K0
[网页提速]preload的使用方法
前言:作为一名网站开发者,你可能已经听说过预加载(preload)了。预加载可以帮助我们在网页加载时提前加载一些资源,以提高网站的性能和用户体验。在这篇博客中,我将介绍preload的用法,并分享一些最佳实践。
笔记堡-堡主
2023/03/14
8050
性能知识点二
之前讲到重排,布局的时候使用flex时,比使用inline-block和float时重排更快,所以在布局时可以优先考虑Flex。
wade
2020/04/23
3010
前端性能优化系列 | 加载优化
在浏览器发起网络请求时,并非每个字节都具有相同的优先级,所以,浏览器通常会对所要加载的内容进行推测,将相对重要的信息先呈现给用户。比如浏览器一般会先加载CSS,再去加载JavaScript脚本和图像文件。当然,浏览器的判断并不一定都是准确的,下面就来看看如何影响浏览器对资源加载的优先级。
用户6256742
2024/08/01
3710
前端性能优化系列 | 加载优化
Resource Hints 知多少
在上篇文章 探究网页资源究竟是如何阻塞浏览器加载的 中介绍到 JS 会阻塞 DOM 的加载,样式会阻塞页面的渲染,外链样式里的自定义字体还会对文字造成闪动给用户带来不好的体验,诸如此类问题还有挺多,那到底该如何解决它们呢?
用户4456933
2021/06/01
1.4K0
Resource Hints 知多少
穷追猛打,阿里二面问了我30分钟从URL输入到渲染...
同样的问题,可以拿来招聘P5也可以是P7,只是深度不同。所以我重新整理了一遍整个流程,本文较长,建议先收藏。
用户9899350
2022/07/29
6810
穷追猛打,阿里二面问了我30分钟从URL输入到渲染...
前端不止:Web性能优化 - 关键渲染路径以及优化策略
我问你:“当你从搜索引擎的结果页面选择打开一条搜索结果时,你觉得多长时间之后,如果页面还处于白屏或者没有加载到关键信息,你会选择关掉这个窗口?”
ThoughtWorks
2018/07/23
1.2K0
前端不止:Web性能优化 - 关键渲染路径以及优化策略
Bypass unsafe-inline mode CSP
[+] Author: evi1m0 [+] Team: n0tr00t security team [+] From: http://www.n0tr00t.com [+] Create: 2016-10-27 0x01 CSP 介绍 CSP[0] 是由单词 Content Security Policy 的首单词组成,CSP旨在减少 (注意这里是减少而不是消灭) 跨站脚本攻击。CSP是一种由开发者定义的安全性政策性申明,通过 CSP 所约束的的规责指定可信的内容来源(这里的内容可以指脚本、图片、
Seebug漏洞平台
2018/03/29
1.5K0
Bypass unsafe-inline mode CSP
深入理解css中的link 和 @import
今天看八股文中,看到了一个面试题: 简明说一下 CSS 中 link 与 @import 的区别和用法?. 再经过实践之后, 决定写一篇文章, 一方面加深自己的理解,同时方便其他掘友进行学习.
心安事随
2024/07/29
4000
深入理解css中的link 和 @import
构建Vite知识体系-项目性能优化
传统的 HTTP 1.1 存在队头阻塞的问题,同一个 TCP 管道中同一时刻只能处理一个 HTTP 请求,也就是说如果当前请求没有处理完,其它的请求都处于阻塞状态,另外浏览器对于同一域名下的并发请求数量都有限制,比如 Chrome 中只允许 6 个请求并发(这个数量不允许用户配置),也就是说请求数量超过 6 个时,多出来的请求只能排队、等待发送。因此,在 HTTP 1.1 协议中,队头阻塞和请求排队问题很容易成为网络层的性能瓶颈。
泯泷、
2024/03/17
4180
前端性能优化总结
最近花了一些时间在项目的性能优化上,背后做了很多工作,但是最后依然没有达到自己想要的结果,有些失望,但是还是记录下自己的执着。
前端迷
2020/07/02
1.3K0
prelink
现如今网络越来越快,网页应用也变得越来越受人们欢迎,与此同时,人们对应用响应速度的期望值也越来越高。 怎样提升网站的响应速度,怎样让用户更快的看到想要的内容已经变得越发重要了。 对此,除了开发者们绞尽脑汁优化应用外,浏览器产商们也提供了各种各样方式来帮助开发者预加载资源。
epoos
2022/10/28
6410
Web页面全链路性能优化指南
性能优化不单指优化一个页面的打开速度,在开发环境将一个项目的启动时间缩短使开发体验更好也属于性能优化,大文件上传时为其添加分片上传、断点续传也属于性能优化。在项目开发以及用户使用的过程中,能够让任何一个链路快一点,都可以被叫做性能优化。
唐志远
2022/10/27
2.1K0
Web页面全链路性能优化指南
相关推荐
什么是 Preload、Prefetch 和 Preconnect?
更多 >
交个朋友
加入前端学习入门群
前端基础系统教学 经验分享避坑指南
加入腾讯云技术交流站
前端技术前沿探索 云开发实战案例分享
加入云开发企业交流群
企业云开发实战交流 探讨技术架构优化
换一批
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验