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.5K01
代码可运行
举报
文章被收录于专栏:前端黑板报前端黑板报
运行总次数:1
代码可运行

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

今天我们来探索一下前端资源的一些指令以及它们如何来提高网站性能的。你应该听过 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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kubernetes多集群管理方案kubefed原理解析
Kubefed(Federation v2)即 Kubernetes 联邦,是开源的多集群解决方案,目前的版本是 v0.8.1,处于beta阶段。Federation v1版本因为在扩展性、权限管理、架构等方便存在一定缺陷而被废弃。v2版本对v1版本架构进行了优化,使用CRD+operator的方式定义一系列自定义联邦资源,并通过自定义controller实现跨集群资源协调能力。
JIMXU
2022/02/16
2.3K4
K8s 多集群思考、实践和探索
把联邦的所有配置信息都写到 annotations 里,整个创建流程与 K8s 类似。配置信息先到 Federated API Server,Federated Controller 把应用创建到各子集群。
SRE运维进阶之路
2024/05/11
3910
K8s 多集群思考、实践和探索
使用 Kubernetes 联邦(Kubefed)进行多集群管理
Federation v2 的安装分两个部分,一是 Controller Plan 和 kubefedctl。
CS实验室
2021/03/22
4K0
使用 Kubernetes 联邦(Kubefed)进行多集群管理
K8s 多集群编排平台 Karmada 入门
Karmada(Kubernetes Armada)是 CNCF 孵化的一个 Kubernetes 管理系统,使您能够在多个 Kubernetes 集群和云中运行云原生应用程序,而无需更改应用程序。通过使用 Kubernetes 原生 API 并提供先进的调度功能,Karmada 实现了真正的开放式、多云 Kubernetes。
我是阳明
2024/06/03
2.5K0
K8s 多集群编排平台 Karmada 入门
用 Karmada 和 Pipy 搭建野生多集群
最近加入 CNCF 成为沙箱项目的 Karmada 项目是一个开放的多 Kubernetes 管理工具,从 Kubernetes Federation 1/2 继承的大量经验,让这个项目有成为多集群管理首选产品的潜力。Karmada 具有开箱即用的跨集群调度能力,简单的使用 PropagationPolicy 就能将 Deployment、Service 这样的原生 Kubernetes 对象在多个集群之间进行灵活的调度。
崔秀龙
2021/11/02
1.3K0
多集群下的 Tekton 流水线
借助于 Kubernetes, Tekton 已经具备很好的弹性, 能够支持大规模构建。同时, 开发 Task 主要使用 Yaml 和 Shell, 这扩大了 Tekton 的各种场景适配范围。
陈少文
2021/06/27
1.1K1
多集群下的 Tekton 流水线
云原生多云容器编排平台karmada上手指南
karmada是华为开源的云原生多云容器编排平台,目标是让开发者像使用单个k8s集群一样使用多k8s云。它的第一个release(v0.1.0)出现在2020年12月,而正式发布则是在2021年4月25日,在深圳召开的华为开发者大会(HDC.Cloud)2021上。
谐云
2021/08/26
1.7K0
云原生多云容器编排平台karmada上手指南
Kubernetes 多集群管理:Kubefed
Kubefed(Federation v2)即 Kubernetes 联邦,是目前社区正在难产的多集群解决方案,目前的版本是 0.1.0,如果考虑到 Federation v1 的话,Kubefed 也算是有个出师未捷身先死的大兄弟了。
CS实验室
2021/03/22
1.6K0
Kubernetes 多集群管理:Kubefed
字节跳动开源KubeAdmiral:基于 K8s 的新一代多集群编排调度引擎
项目地址: https://github.com/kubewharf/kubeadmiral
深度学习与Python
2023/08/09
1.7K0
字节跳动开源KubeAdmiral:基于 K8s 的新一代多集群编排调度引擎
Karmada 和 OCM:应对多集群机群管理挑战的两种新方法
作者:David Eads(@deads2k)、王泽锋(@kevin-wangzefeng)
CNCF
2022/11/28
2.2K0
Karmada 和 OCM:应对多集群机群管理挑战的两种新方法
Kubernetes 多集群调度方案调研
Kubernetes 是一个容器编排平台,用于调度、部署和管理容器化应用。并且经过几年的发展,k8s 已经成为事实上的容器编排平台标准。集群是 k8s 架构的构建块(building block)。集群由多个工作节点(物理机或者虚拟机)组成,提供一个可供容器运行的资源池。一个集群拥有:
PHP开发工程师
2022/07/09
2K0
Kubernetes 多集群调度方案调研
基于Kubernetes的容器编排:高级实践与深度解析
Kubernetes作为当今容器编排领域的事实标准,已从最初的简单容器调度系统演变为一个功能强大、生态丰富的云原生操作系统。本文将深入探讨Kubernetes的高级容器编排能力,涵盖架构设计原理、高级调度策略、服务网格集成、安全加固、多集群管理以及性能优化等关键领域,为技术决策者和架构师提供全面的指导。
徐关山
2025/08/16
2280
n2-kubernetes操作命令详细一览
描述: 学习 Kubernetes 最重要的是其基础的理论概念以及实践操作, 而实际操作又必不可少的是k8s相关的命令,所以为了方便自己以及读者的查阅,将自己在学习过程中所遇的命令进行一个简单的记录;
全栈工程师修炼指南
2022/09/29
2.1K0
Kubernetes集群部署相关
free -h,显示内存和利用率 用swapon -s可以检查特定分区,逻辑卷或文件的交换,-s是摘要的含义,用它来获取交换的详细信息,以千字节为单位 或者使用top命令 vmstat,可以用该命令查看交换和交换信息,无法查看交换的总值
用户1413827
2023/11/28
8240
Kubernetes集群部署相关
Kubevela 下的多集群应用
需要区分几个角色: 开发、运维、运维开发。开发面向的是业务需求,运维面向的是业务稳定,运维开发面向的是效率。运维开发提供各种各样的工具,打通开发和运维之间的壁垒,既要快速满足业务上线。又要保障业务稳定。
陈少文
2021/09/19
1.3K0
Kubevela 下的多集群应用
KubeSphere3.0 多集群联邦
KubeSphere v3.0.0进行了重大升级,其中多集群管理功能是重要更新之一。
jwangkun
2021/12/23
1K0
KubeSphere3.0 多集群联邦
Kubernetes整理
一般做法:容器A共享容器B$ docker run --net=B --volumes-from=B --name=A image-A ...,这种做法会存在一个问题,容器AB的关系从对等变成了拓扑。
铭丶
2021/03/12
7980
Kubernetes 策略管理引擎 - Kyverno
Kyverno 是来自 Nirmata 的开源项目,后来捐赠给了 CNCF。Kyverno 是一个具有验证和变异能力的 Kubernetes 策略引擎,但是它还有生成资源的功能,还加入了 API 对象查询的能力。Kyverno 原本就是为 Kubernetes 编写的,除了对象生成功能之外,无需专用语言即可编写策略。
我是阳明
2024/04/19
6340
Kubernetes 策略管理引擎 - Kyverno
kubernetes入门-概念篇
Kubernetes is an open-source platform for automating deployment, scaling, and operations of application containers across clusters of hosts, providing container-centric infrastructure.
王磊-字节跳动
2019/05/28
2.8K0
Kubernetes之Kuboard多集群管理工具安装实践
描述: Kuboard 是一款免费的 Kubernetes 管理工具,提供了丰富的功能,结合已有或新建的代码仓库、镜像仓库、CI/CD工具等,可以便捷的搭建一个生产可用的 Kubernetes 容器云平台,轻松管理和运行云原生应用。
全栈工程师修炼指南
2022/09/29
9.9K0
Kubernetes之Kuboard多集群管理工具安装实践
相关推荐
Kubernetes多集群管理方案kubefed原理解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验