延迟加载过多对性能的影响

news2025/2/22 17:14:50

延迟加载是一种将资源下载操作推迟到需要时再下载的技术,可以节省流量并减少关键资源的网络争用。它于2019年成为 Web 标准,今天大多数主流浏览器支持图片的 loading="lazy"

听起来不错,但是否存在延迟加载过多的情况?

这篇博文总结了我们如何分析公开的网络透明度数据和临时 A/B 测试,以了解原生图片延迟加载的采用率和性能特征。我们发现,延迟加载对于减少不需要的图片字节而言非常有效,但过度使用会对性能产生负面影响。具体而言,我们的分析表明,在初始视口中更加刻意地加载图片(而较为及时地加载其余图片),从而达到两全其美的效果:加载的字节数更少,并改善核心网页指标。

采用

​ 根据 HTTP Archive 中的最新数据,17% 的网站使用了原生图片延迟加载,并且这种加载速度正在快速增长。对于相对较新的 API 来说,在生态系统中的这种立足点非常可观。 ​

使用原生图片延迟加载的网站类型的细分数据。 (来源)

相关性效果

深入了解HTTP Archive 后,我们可以使用Largest Contentful Paint(LCP) 指标来比较使用原生图片延迟加载和不使用原生图片延迟加载的网页的性能。LCP 数据来自Chrome 用户体验报告 (CrUX) 中的真实用户体验,而非实验室中的合成测试。下图使用箱须图来直观呈现每个页面的 75 百分位 LCP 的分布情况:线表示第 10 和第 90 百分位,方框表示第 25 和第 75 百分位。

所有网页的 LCP 体验的第 75 百分位的分布情况,按是否使用原生图片延迟加载进行细分。 (来源)


未采用延迟加载的中位数网页的 LCP 第 75 百分位为 2,922 毫秒,而启用延迟加载的中位数网页的 LCP 为 3,546 毫秒。总体而言,使用延迟加载的网站的 LCP 性能往往更差。

请务必注意,这些结果是相关结果,并且不一定是延迟加载是导致性能下降的原因。假设,如果 WordPress 网站的速度往往有点慢,并且考虑到它们在延迟加载同类群组中的占比,就可以解释为什么会出现这种情况。因此,我们不妨仅关注 WordPress 网站,尽量避免这种差异。

WordPress 网页的第 75 百分位的 LCP 体验的分布情况,按是否使用原生图片延迟加载进行细分。 (来源)


遗憾的是,当我们深入研究 WordPress 页面时,出现了同样的情况;使用延迟加载的网页往往 LCP 性能较慢。未采用延迟加载的 WordPress 网页的中位数值为 3,495 毫秒,而启用延迟加载的中位数网页的 LCP 为 3,768 毫秒。

这仍不能证明延迟加载会导致页面运行速度变慢,但使用延迟加载确实与性能降低一致。为了尝试解答因果关系问题,我们设置了一个基于实验室的 A/B 测试。

因果关系效果

A/B 测试的目标是验证或反驳以下假设:如 WordPress 核心中所实现的原生图片延迟加载会降低 LCP 性能并减少图片字节数。使用的方法是使用 twentytwentyone 主题测试一个演示版 WordPress 网站。本文使用 WebPageTest 在桌面设备和模拟移动设备上测试了归档页面和单页类型(就像首页和文章页面一样)。我们测试了启用和未启用延迟加载的页面组合,并分别运行了 9 次测试,以获取 LCP 中位数值和图片字节数。

在示例 WordPress 网页上停用原生图片延迟加载后,LCP [毫秒] 的变化。
系列默认已停用与默认值的差异
twentytwentyone-archive-desktop20291759-13%
twentytwentyone-archive-mobile1,657,0001,403,000-15%
twentytwentyone-single-desktop165517264%
twentytwentyone-single-mobile135213842%

上述结果比较了针对桌面设备和移动设备的归档网页和单个网页的测试的 LCP 中位数(以毫秒为单位)。我们发现,在归档页面上停用延迟加载后,LCP 有了显著的改善。但在单个网页上,这种差异更为中立。

值得注意的是,停用延迟加载的效果实际上似乎会使单页速度更快。不过,桌面设备和移动设备测试的 LCP 差异都小于 1 个标准差,因此我们将其归因于方差,并将总体变化视为中立。相比之下,存档网页的差值更像是两到三个标准差。

通过在示例 WordPress 网页上停用原生图片延迟加载,图片字节数 (KB) 发生变化。
系列默认已停用与默认值的差异
twentytwentyone-archive-desktop5771173103%
twentytwentyone-archive-mobile172378120%
twentytwentyone-single-desktop301850183%
twentytwentyone-single-mobile114378233%

上述结果比较了每项测试的图片字节数中位数(以 KB 为单位)。不出所料,延迟加载对减少图片字节数有着非常明显的积极影响。如果真实用户将整个页面向下滚动,所有图片在进入视口时仍然会加载,但这些结果表明初始网页加载的性能得到了提升。

总结一下 A/B 测试的结果,WordPress 使用的延迟加载技术明显有助于减少图片字节数,但代价是延迟 LCP。

测试修正效果

在深入了解如何实现该修复之前,我们先来看看 WordPress 中延迟加载的工作原理。当前实现最重要的方面是,它会延迟加载首屏(视口内)的图片。CMS 博文承认这是应避免的模式,但当时的实验数据表明,对 LCP 的影响微乎其微,值得简化 WordPress 核心中的实现。

根据这些新数据,我们创建了一项实验性修复,以避免延迟加载首屏图片,并在与第一项 A/B 测试相同的条件下对其进行测试。

示例 WordPress 网页上提议的原生图片延迟加载导致的 LCP(毫秒)变化。
系列默认已停用fix与默认值的差异与已停用的区别
twentytwentyone-archive-desktop202917591749-14%-1%
twentytwentyone-archive-mobile1,657,0001,403,0001352-18%-4%
twentytwentyone-single-desktop165517261,676,0001%-3%
twentytwentyone-single-mobile135213841342-1%-3%

这些结果充满希望。仅延迟加载非首屏图片会导致 LCP 回归完全逆转,甚至与完全停用 LCP 相比,可能还有细微的改进。怎么才能比不延迟加载更快呢?一种解释是,通过不加载非首屏图片,可以减少 LCP 图片的网络争用情况,从而加快加载速度。

示例 WordPress 网页上建议的原生图片延迟加载方案的图片字节数 (KB) 变化。
系列默认已停用fix与默认值的差异与已停用的区别
twentytwentyone-archive-desktop57711735770%-51%
twentytwentyone-archive-mobile1723781720%-54%
twentytwentyone-single-desktop3018503010%-65%
twentytwentyone-single-mobile1143781140%-70%

就图片字节数而言,与默认行为相比,此修复完全没有变化。这太棒了,因为这是当前方法的优势之一。

此修复存在一些注意事项。WordPress 会确定要在服务器端延迟加载哪些图片,也就是说,它不知道用户的视口大小,也不知道最初是否会在其中加载图片。因此,该修复会使用有关图片在标记中的相对位置的启发法来猜测图片是否会位于视口中。具体而言,如果图片是网页上的第一张精选图片或主要内容中的第一张图片,系统会假定它位于首屏(或靠近图片),并且不会延迟加载。页面级条件(例如标题中的字词数或主要内容早期的段落文本量)可能会影响图片是否在视口内。此外,还有一些用户级条件可能会影响启发词语的准确度,特别是视口大小和使用会改变页面滚动位置的锚点链接。出于这些原因,请务必承认,该修复只会经过校准以在一般情况下提供良好的性能,并且可能需要进行微调,以使这些结果适用于所有实际场景。

发布

既然已经确定了更好的延迟加载图片的方法,不仅减少了图片大小,而且提高了 LCP 性能,那么该如何让网站开始使用它呢?优先级最高的更改是向 WordPress Core 提交补丁,以实现实验性修复。

此外,还可以参考《适用于 CMS 的浏览器级延迟加载》这篇博文中的指南,以阐明首屏延迟加载的负面影响,以及 CMS 如何使用启发法来避免这种加载。

由于这些最佳实践适用于所有 Web 开发者,因此可能有必要在 Lighthouse 等工具中标记延迟加载反模式。如果您有兴趣了解该审核的进展情况,请参阅 GitHub 上的功能请求。在此之前,开发者可采取一项措施来查找被延迟加载的 LCP 元素实例,即向其字段数据添加更详细的日志记录。

new PerformanceObserver((list) => {
  const latestEntry = list.getEntries().at(-1);

  if (latestEntry?.element?.getAttribute('loading') == 'lazy') {
    console.warn('Warning: LCP element was lazy loaded', latestEntry);
  }
}).observe({type: 'largest-contentful-paint', buffered: true});

上面的 JavaScript 代码段将评估最新的 LCP 元素,并在该元素被延迟加载时记录警告。

这也凸显了延迟加载技术的尖端,以及在平台级别改进 API 的潜力。例如,Chromium 中有一个待解决的问题,需要尝试以原生方式快速加载前几张图片,这与修复方法类似(尽管具有 loading 属性)。

总结

如果您的网站使用原生图片延迟加载,请检查其实现方式并运行 A/B 测试,以便更好地了解其性能开销。若能更加刻意地加载首屏图片,则可能有所助益。如果您拥有 WordPress 网站,很可能会有一个补丁登陆 WordPress 核心。如果您使用的是其他 CMS,请确保其了解此处所述的潜在性能问题。

试用相对较新的 Web 平台 API 可能会带来风险和回报,它们被称之为前沿功能是有其原因的。虽然大家都已经开始感受到原生图片延迟加载的棘手问题,但也看到了使用这种加载方式的益处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1655393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sarcasm detection论文解析 |使用 BERT 进行中间任务迁移学习的刺检测

论文地址 论文地址:https://www.mdpi.com/2227-7390/10/5/844#/ github:edosavini/TransferBertSarcasm (github.com) 论文首页 笔记框架 使用 BERT 进行中间任务迁移学习的讽刺检测 📅出版年份:2022 📖出版期刊:Mathematics &…

您可以使用WordPress创建的19种网站类型

当人们决定为什么他们应该使用WordPress时,我们经常会被问到“WordPress可以做[空白]吗?答案大多是肯定的。在本文中,我们将向您展示您可以使用WordPress创建的19种不同类型的网站,而无需学习任何编程技巧。 目录 隐藏 1 开始使用…

什么是Facebook付费广告营销?

Facebook作为全球最大的社交平台之一,成为了跨境卖家不可或缺的营销阵地。它不仅拥有庞大的用户基数,还提供了丰富的广告工具和社群互动功能,让商家能够精准触达目标市场,提升品牌影响力。云衔科技通过Facebook付费广告营销的专业…

开源免费的发票识别OCR应用:Invoice

Invoice:轻松识别,发票电子化扫描烦恼消- 精选真开源,释放新价值。 概览 Invoice 是github社区上一个采用开源许可协议发布的增值税发票光学字符识别(OCR)解决方案项目。该项目不仅集成了预训练的高级模型&#xff0c…

ansible批量运维管理

Ansible是一种自动化运维工具,基于Python开发,主要用于自动化IT任务,如配置管理、应用程序部署、软件升级和系统管理等。它集合了众多运维工具(如puppet、cfengine、chef、func、fabric)的优点,实现了批量系…

CopyClip for Mac - 高效复制粘贴,轻松管理剪贴板

CopyClip for Mac,一款专为Mac用户打造的剪贴板管理工具,让你在复制粘贴的日常任务中,享受到前所未有的高效与便捷。 它常驻在菜单栏中,时刻准备为你服务。一旦你复制了内容,CopyClip就会自动将其保存至历史记录中&…

软件杯 深度学习花卉识别 - python 机器视觉 opencv

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 &a…

为软件教学文档增加实践能力

为了更方便软件教学,我们在凌鲨(OpenLinkSaas)上增加了公共资源引用的功能。 目前可以被引用的公共资源: 微应用常用软件公共知识库Docker模板 引用公共资源 引用微应用 目前微应用包含了主流数据库,终端等工具,可以方便的进行各种相关实…

词袋法TFIDF

Tf-idf⽂本特征提取 TF-IDF的主要思想是:如果某个词或短语在⼀篇⽂章中出现的概率⾼,并且在其他⽂章中很少出现,则认为此词或者短语具有很好的类别区分能⼒,适合⽤来分类。TF-IDF作⽤:⽤以评估⼀字词对于⼀个⽂件集或…

制冷机组喷液冷却与经济器的介绍

在制冷机组中,喷液冷却与经济器两者虽同可以为提升制冷系统效率与性能,经济器是一种特殊的换热器,主要用于制冷系统中,以提高系统的效率和性能。通常安装在制冷机组的冷凝器之后、膨胀阀之前的位置,确保在制冷剂流向蒸…

自动驾驶主流芯片及平台架构(五)选择自动驾驶平台考虑因素

自动驾驶域控制器基本架构 域控制其中最核心的是主芯片,一般会采用一颗或多颗高性能的SOC。SOC是System on Chip的缩写,就是在单块芯片上集成多个微处理器、模拟IP核、数字IP核和存储器等部件,比如CPU、GPU、DSP、ISP、Codec、NPU、Modem等模…

等保测评二级有哪些标准

等级保护测评(等保测评)是中国的一项网络安全标准,旨在评估和确保关键信息基础设施的安全。二级等保测评是适用于一般级别的信息系统,这些系统一旦受损,可能会对社会秩序、公共利益和公民权利造成一定程度的影响。 二级…

Flask-HTTP请求、响应、上下文、进阶实验

本节主要目录如下: 一、请求响应循环 二、HTTP请求 2.1、请求报文 2.2、Request对象 2.3、在Flask中处理请求 2.4、请求钩子 三、HTTP响应 3.1、响应报文 3.2、在Flask中生成响应 3.3、响应格式 3.4、Cookie 3.5、session:安全的Cookie 四、…

使用.NET8实现Web API

目录 1、环境准备1.1、从官网下载及安装VS2022社区版1.2、下载及安装asp.net core的运行时及IIS Module 2、WebAPI工程创建2.2 推荐的库2.2.1 数据库篇2.2.1.1、 SQLSugar2.2.1.2、 OracleAccess 2.2.2、IOC篇2.2.2.1、autofac2.2.2.2、 2.2.3、日志记录篇2.2.3.1 log4net2.2.3…

考情管理之签到和签退

前端 菜单权限 只给超级管理员分配签到管理菜单&#xff0c;一般员工无法查看 查找首页页面 观察到首页有个“使用率”汉字 在项目中查找“使用率”这三个字 增加签到和签退按钮 页面代码 <div class"info-box"><span class"info-box-icon bg-a…

梦幻西游12门派复古怀旧 单机版 安装简单,云盘下载哦

做游戏开发的朋友&#xff0c;可以多参考里面的设计思想&#xff0c;真的不错。 梦幻西游12门派复古怀旧 单机版 安装简单&#xff0c;云盘下载哦 游戏大小&#xff1a; 支持系统&#xff1a;win7、win10 64位 特色&#xff1a;简化安装&#xff0c;非常容易。 重新整盒高…

【数据结构】-- 链表专题

链表的分类 前面我们实现了单链表&#xff0c;单链表只是链表的一种。可以根据以下几个标准来判断链表的类型&#xff1a; 1.单向或者双向 如图所示&#xff0c;单向链表中一个节点的指针域只储存了下一个节点的指针&#xff0c;能通过前一个节点访问后一个节点&#xff0c;无…

IP协议,网络层

一、IP协议报文 在网络层最主要的协议是IP协议&#xff0c;网络层的主要任务是进行&#xff1a;1.地址管理 2.路由选择 地址管理&#xff1a;使用一套地址体系&#xff0c;描述互联网中每个设备所处的位置。 IP地址有两个版本&#xff0c;1.IPV4 2.IPV6 &#xff0c;IP…

Blender材质,纹理,UV

1.材质Material&#xff0c;用于描述物体的表面性质&#xff0c;包含以下基本属性 -基础色 -金属/非金属 -粗糙度 -透光度 -凹凸细节 添加材质步骤&#xff1a; 1&#xff09;切换到材质预览模式 2&#xff09;打开材质面板 3&#xff09;添加一个材质&#xff0c;包括材…

12.轻量级锁原理及其实战

文章目录 轻量级锁原理及其实战1.轻量级锁的核心原理2.轻量级锁的演示2.1.轻量级锁的演示代码2.2.结果分析 3.轻量级锁的分类3.1.普通自旋锁3.2.自适应自旋锁 4.轻量级锁的膨胀 轻量级锁原理及其实战 引入轻量级锁的主要目的是在多线程环境竞争不激烈的情况下&#xff0c; 通过…