Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 代码发布 › 「教程分享」如何通过预加载 (Preload) 关键资源以提高网站加载速度

「教程分享」如何通过预加载 (Preload) 关键资源以提高网站加载速度

Eswlnk的头像
Eswlnk
2022-12-29 12:42:19
「教程分享」如何通过预加载 (Preload) 关键资源以提高网站加载速度-Eswlnk Blog
智能摘要 AI
预加载是一种优化网页加载的技术,通过在HTML文档的`<head>`部分添加`<link rel='preload'>`标签,指定页面加载时需要的资源(如字体、图像、JavaScript和CSS),从而加速关键资源的加载。预加载特别适合于浏览器通常较晚发现但重要的资源,如网络字体和关键CSS。合理使用预加载可显著提升页面交互时间和首次内容绘制性能,但需避免滥用,以免增加总阻塞时间。预加载支持多种资源类型,包括字体、脚本、样式表、图像等,并可通过HTTP头或webpack等工具实现。使用时应注意避免重复加载、正确配置跨域和缓存策略,以确保最佳效果。

预加载允许您指定在页面加载期间立即或很快需要的资源(例如字体、图像、JavaScript 和 CSS)。 在您网站的每个页面的<head>…</head>部分顶部添加一个link rel='preload'标签。

比如以下代码:

<link rel='preload' href='font.woff2' as='font' type='font/woff2' crossorigin>

打开网页时,浏览器会从服务器请求HTML文档,解析其内容,并为引用资源提交单独请求。作为开发人员,您知道页面需要的所有资源以及哪些资源最为重要。您可以使用这些知识提前请求关键资源,加快加载的过程。本文介绍了如何使用 <link> 来达成此目的。

预加载的工作原理

预加载最适合用于浏览器通常较晚发现的资源。

「教程分享」如何通过预加载 (Preload) 关键资源以提高网站加载速度-Eswlnk Blog

在本例中,Pacifico字体是在样式表通过 @font-face 规则定义的。浏览器只有在完成下载和解析样式表后才会加载字体文件。

通过预加载某个资源,您希望浏览器可以比正常发现它更早地获取该资源,因为您认为它对当前页面很重要。

「教程分享」如何通过预加载 (Preload) 关键资源以提高网站加载速度-Eswlnk Blog

在本例中,已预加载了Pacifico字体,所以下载会与样式表并行进行。

关键请求链代表着浏览器优先处理和获取的资源顺序。 Lighthouse会将位于该链第三层的资产识别为后期发现的资产。您可以使用预加载关键请求审计来确定要预加载的资源。

「教程分享」如何通过预加载 (Preload) 关键资源以提高网站加载速度-Eswlnk Blog

您可以通过在HTML文档的头部添加带有 rel="preload" 的 <link> 标记来预加载资源:

<link as="script" href="critical.js">

浏览器会缓存预加载的资源,以便在需要时立即可用。(它不会执行脚本或应用样式表。)

在实施预加载后,包括Shopify、Financial Times和Treebo在内的许多网站在以用户为中心的指标(例如Time to Interactive 和First Contentful Paint)等方面,都实现了1秒的改进。

浏览器会根据情况执行诸如 preconnect 和 prefetch 等资源提示。而另一方面,preload 对浏览器来说是强制性的。现代浏览器已经非常擅长对资源进行优先级排序,这就是为什么谨慎使用 preload 并且只预加载最关键的资源那么重要。

load 事件后大约3秒会触发Chrome中的控制台警告。

「教程分享」如何通过预加载 (Preload) 关键资源以提高网站加载速度-Eswlnk Blog

所有现代浏览器均支持 preload。

有助于修复以下两种类型的警告:

1.预加载密钥请求

预加载关键请求是Web字体的常见警告。Font Awesome是您可能会看到的一种非常常见的字体。

「教程分享」如何通过预加载 (Preload) 关键资源以提高网站加载速度-Eswlnk Blog

预加载关键请求

2.渲染阻塞资源

通过预加载,您还可以修复渲染阻塞资源警告,因为资产以非阻塞方式加载。

「教程分享」如何通过预加载 (Preload) 关键资源以提高网站加载速度-Eswlnk Blog

消除渲染阻塞资源

如果您正在预加载图像,它还可以帮助降低最大内容绘制 (LCP) 时间。

可预加载资源

有许多不同的资源可以预加载。

公共资源

  • font: 字体文件。
  • script: JavaScript文件。
  • style: CSS样式表。
  • image: 图像文件 ( .jpg, .png, .webp)。

其他资源

  • audio: 音频文件
  • document: 旨在由 <frame> 或<iframe>嵌入的HTML文档。
  • embed:要嵌入到 <embed> 元素中的资源。
  • fetch:要通过fetch或XHR请求访问的资源,例如ArrayBuffer或JSON文件。
  • object:要嵌入到 <object> 元素中的资源。
  • track: WebVTT文件。
  • worker:一个JavaScript网络worker或共享worker。
  • video: 视频文件。

注意:在撰写本文时,Chrome存在一个未解决的bug,即预加载请求比其他更高优先级资源的获取速度更快。在解决此问题之前,请注意预加载的资源如何“跳过队列”并比应有的时间更早地被请求。

预加载CSS中定义的资源

在浏览器下载并解析CSS文件之前,不会发现这些文件中使用 @font-face 规则定义的字体或背景图像。预加载这些资源可确保在下载CSS文件之前获取它们。

预加载CSS文件

如果您使用了关键CSS方法,那么CSS将分成两部分。渲染首屏内容所需的关键CSS内联在文档的 <head> 中,非关键CSS通常使用JavaScript延迟加载。在加载非关键CSS之前等待JavaScript执行会导致用户滚动时呈现延迟,因此最好使用 <link> 更快地启动下载。

预加载JavaScript文件

由于浏览器不执行预加载的文件,因此预加载有助于将获取与执行分开,这可以改善Time to Interactive等指标。如果您拆分JavaScript包并仅预加载关键块,则预加载效果最佳。

如何实现rel=preload

实现 preload 最简单的方法是在文档的 <head> 中添加一个<link> 标记:

<head>  <link as="script" href="critical.js"></head>

提供 as 属性可帮助浏览器根据其类型来设置预获取资源的优先级,设置正确的标头,以及确定资源是否已存在于缓存中。此属性可接受的值包括: script 、style 、font 和 image 等等。

请查看Chrome Resource Priorities and Scheduling文档,详细了解浏览器如何确定不同类型资源的优先级。

注意:省略 as 属性或使用了无效值,就相当于XHR请求,这时浏览器不知道它获取的内容,因此无法确定正确的优先级。它还可能导致某些资源(例如脚本)被获取两次。

某些类型的资源,例如字体,以匿名模式加载。对于这些资源,您必须设置 preload 的 crossorigin 属性:

<link href="ComicSans.woff2" as="font" type="font/woff2" crossorigin>

注意:没有设置 crossorigin 属性的预加载的字体将被获取两次!

另外,<link> 元素还接受 type 属性,它包含链接资源的MIME类型。浏览器使用 type 属性的值来确保资源仅在其文件类型受支持时才被预加载。如果浏览器不支持指定的资源类型,它将忽略 <link> 。

请尝试通过预加载web字体提高网页性能。

您可以通过 Link HTTP标头预加载任何类型的资源:

Link: </css/style.css>;; as="style"

在HTTP标头中指定 preload 的一个好处是,浏览器不需要解析文档来发现它,这在某些情况下可以提供一些小幅改进。

使用webpack预加载JavaScript模块

如果您使用了创建应用程序构建文件的模块打包器,则需要检查它是否支持预加载标签的注入。在webpack 4.6.0或更高版本中,它通过在 import()中使用magic comments(魔法注释)支持预加载:

import(_/* webpackPreload: true */_ "CriticalChunk")

如果您使用的是旧版webpack,请使用第三方插件,例如preload-webpack-plugin。

预加载时要记住的事项

  • 不要预加载每个脚本,否则它实际上会导致性能问题,例如增加总阻塞时间 (TBT)。预加载应该只用于立即需要的资源,因此它们以非阻塞方式加载。这通常用于网络字体、图像、CSS和JS。
  • 如果您正在使用缓存清除技术(例如查询字符串domain.com/style.css?ver=1.0),请不要忘记浏览器会看到确切的URL。因此,您将需要使用查询字符串URL,或者您可以使用句柄动态预加载。
  • 如果您有一个CDN重写您的资产的URL,请确保您要预加载的所有资源首先被正确地重写。如果URL不匹配,您最终可能会加载资源两次。
  • 如果您预加载样式表 (CSS) 或脚本 (JS),并且您正在使用插件来组合您的CSS/JSS(Autoptimize、WP Rocket等),请确保从连接过程中排除您预加载的资源。否则,它可能会被打包两次并最终在您的网站上放置更多代码。

小结

为提高网页速度,请预加载浏览器来发现较晚的重要资源。预加载全部资源会适得其反,因此请谨慎使用 preload,并衡量它在现实中的影响。

本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
声明:本站原创文章文字版权归本站所有,转载务必注明作者和出处;本站转载文章仅仅代表原作者观点,不代表本站立场,图文版权归原作者所有。如有侵权,请联系我们删除。
csscss样式表html字体JavaScript优先级预加载预加载关键资源
0
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
「DLL注入学习」通过远程线程注入DLL
上一篇
「Linux操作系统实验」模块编程
下一篇

评论 (0)

请登录以参与评论
现在登录
    发表评论

猜你喜欢

  • 「日志记录」逆向必应翻译网页版API实现免费调用
  • 「代码分享」第三方平台VIP视频解析API接口
  • 「至臻原创」某系统网站登录功能监测
  • 「开发日志」在Vue3中如何为路由Query参数标注类型
  • 「其他分享」分享一个在Tun模式下可用的脚本
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

「代码发布」添加代码为WordPress开启Webp和SVG支持
2022-08-13 15:22:17
API接口上云|Serverless云函数服务部署实战
2022-02-25 1:35:58
「代码发布」实现博客或第三方网站嵌入bilibili视频
2022-08-20 15:52:26

文章目录

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 0.773 秒   |  SQL查询 38 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈