Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >「译」关于优化 LCP 的常见误解

「译」关于优化 LCP 的常见误解

作者头像
泯泷、
修改于 2024-09-30 07:19:29
修改于 2024-09-30 07:19:29
3000
举报
文章被收录于专栏:前端工具前端工具

原文:https://web.dev/blog/common-misconceptions-lcp原标题:Common misconceptions about how to optimize LCP 作者:Brendan Kenny

页面的最大内容绘制(Largest Contentful Paint,LCP)可能很复杂,难以改进,通常涉及多个变动因素和权衡。这篇文章查看了来自网络上真实页面加载的现场数据,以确定开发人员应该将优化工作重点放在哪里。

经典 LCP 建议:缩减图片大小!

对于网络上的大多数页面来说,最大内容绘制(Largest Contentful Paint,LCP)元素是一幅图像。那么,很自然地会认为改善 LCP 的最佳方法是优化你的 LCP 图像。

在 LCP(最大内容绘制)推出以来的五年左右时间里,这通常是头条建议。确保你的图像大小合适且压缩充分,并且在可能的情况下使用 21 世纪的图像格式。Lighthouse 甚至有三个不同的审核来提出这些建议。

The three image-optimization audits in a Lighthouse report
The three image-optimization audits in a Lighthouse report

之所以如此常见建议,原因之一在于:过多的字节数易于测量,而图像压缩工具容易推荐使用。根据您的构建和部署流水线,实现起来可能也很简单。

如果有,就去执行吧!向用户发送的字节数很少会带来优势。网络上有许多网站仍在提供不必要的大图片,即使进行基本压缩就可以解决问题。

然而,当我们开始查看 Chrome 中用户的现场性能数据,了解 LCP 时间通常都花在哪些地方时,我们发现图片下载时间几乎从未成为瓶颈。

相反,LCP 的其他部分是一个大得多的问题。

LCP 子部分细分

为了了解改进 LCP 的最大机会领域,我们查看了 LCP 子部分的数据,如优化 LCP 中所述。

虽然每个网页和每个框架都可能会采用不同的方法来加载和显示将成为网页 LCP 元素的内容,但每个网页都可以分为以下子部分:

LCP 明细,显示四个子部分
LCP 明细,显示四个子部分

引用该文章中的各子部分如下:

  • 首字节时间 (TTFB)

从用户开始加载网页到浏览器加载网页之间的时间 接收 HTML 文档响应的第一个字节。

  • 资源加载延迟

从 TTFB 到浏览器开始加载 LCP 资源所用的时间。如果 LCP 元素不需要加载资源即可渲染,现为 0

  • 资源加载时长

加载 LCP 资源本身所用的时长。如果 LCP 元素不需要加载资源即可渲染,时间为 0

  • 元素渲染延迟

从 LCP 资源完成加载到 LCP 元素完成加载之间的时间 才能完全呈现

真实的导航性能数据

一个条形图,直观显示每个 LCP 子部分所花费的时间差异,分为“良好”“需要改进”和“较差”的 LCP 存储分区。TTFB 和加载延迟时间在持续时间上快速增加,而加载持续时间和渲染延迟时间仍然很短。下表中重现了数据
一个条形图,直观显示每个 LCP 子部分所花费的时间差异,分为“良好”“需要改进”和“较差”的 LCP 存储分区。TTFB 和加载延迟时间在持续时间上快速增加,而加载持续时间和渲染延迟时间仍然很短。下表中重现了数据

LCP 分级

TTFB(毫秒)

图片加载延迟(毫秒)

图片加载时长(毫秒)

渲染延迟(毫秒)

良好

600

350

160

230

需要改进

1,360,000

720

270

310

2,270,000

1290

350

360

在这篇博文中,我们使用了 Chrome 中带有子资源图片 LCP 的网页导航数据来查看 LCP 子部分。我们以前了解过此类数据,但从未通过实测数据来了解真实用户在等待网页 LCP 时将时间花在了何处。

Google 开发者专家 Estela Franco 在 2023 年 11 月的 performance.now() 会议上抢先了解了此实测数据

与 Core Web Vitals 一样,对于 CrUX 数据集中每个来源的每个 LCP 子部分,我们选取了第 75 个百分位 (p75),从而得出 p75 值的 4 次分布(每个子部分各一个)。为了总结这些分布情况,我们针对四个 LCP 子部分分别取了所有源中这些值的中位数。

最后,我们根据源是“良好”“需要改进”还是“较差”将源分成多个存储分区第 75 百分位的 LCP。这有助于显示 LCP 良好与 LCP 不良的来源有何区别。

要缩减 LCP 图片的大小吗?这次有数据

加载时长用于衡量提取 LCP 资源(在本例中为图片)所需的时间。该时间通常与映像中的字节数成正比,因此所有减少该字节数的性能建议都是如此。

从前面的图表中时间趋势来看,有一点也值得注意,那就是图片加载时长没有花费很多时间。事实上,在所有 LCP 分桶中,它是最短的 LCP 子部分。与 LCP 性能良好的源相比,LCP 性能不佳的来源的加载时长更长,但这并不是耗费大量时间的因素。

大多数 LCP 表现不佳的来源在下载 LCP 映像时所花的时间都不到其 p75 LCP 时间的 10%。

是的,你应确保对图片进行优化,但这只是改进 LCP 的一个环节。从这些数据可以看出,对于网络上的典型来源,无论压缩方案有多复杂,LCP 整体上的潜在毫秒增益都很小。

请注意,LCP 的实测数据包括到网页的所有类型的导航,包括 LCP 资源已存在于浏览器缓存中的导航。这可以降低这些数字,但是用每个源站的 p75 加载时长过滤掉了很多这种情况(在访问您的网站的 75% 的导航中,虽然有 75% 的导航已在缓存中保存了 LCP 图片,但这种情况不太可能发生)。

最后令人惊讶的是,加载速度过慢通常是在移动设备上和移动网络的质量造成的。我们可能曾以为,普通手机要像使用有线连接的桌面设备一样要多次下载同一张图片。数据显示,情况不再如此。对于 LCP 较低的来源,P75 图片在移动设备上的加载时间中位数仅比桌面设备慢 20%。

首字节时间 (TTFB)

对于发出网络请求的导航,TTFB 始终需要一些时间。执行 DNS 查找和启动连接需要花费一些时间。物理问题无与伦比:一项请求必须通过电线和光缆在现实世界中穿行才能到达服务器,然后响应必须返回该服务器。即使是具有良好 LCP 的中位数来源,在第 75 个百分位的 TTFB 上花费的时间也超过 0.5 秒。

然而,良好 LCP 源与不良 LCP 源之间的 TTFB 差异表明了改进空间。对于至少一半的 LCP 较差的来源来说,*仅* 2,270 毫秒的 p75 TTFB 几乎可以保证 p75 LCP 不会比 2.5 秒的“良好”快阈值。即便是该时间的适度缩短百分比,也意味着 LCP 会得到显著提升。

你可能无法通过物理验证,但可以做到这一点。例如,如果您的用户经常与您的服务器位于不同的位置,那么 CDN 可以使您的内容更靠近他们。

如需了解详情,请参阅优化 TTFB 指南

资源加载延迟,被忽视的缓慢最大内容绘制(LCP)罪魁祸首。

如果首次字节时间(TTFB)可以得到改善,并且任何改善都受到物理条件的限制,那么资源加载延迟就有可能被消除,实际上,它仅受服务架构的限制。

此子部分测量从 HTML 响应的第一个字节到达(TTFB)到浏览器开始请求最大内容绘制(LCP)图像之间的时间。多年来,我们一直关注下载最大内容绘制图像需要多长时间,但我们经常忽略在浏览器被告知开始下载之前浪费的时间。

具有较差最大内容绘制(LCP)的中等网站在等待开始下载 LCP 图像上花费的时间几乎是实际下载它的四倍,在首字节时间(TTFB)和图像请求之间等待 1.3 秒。这在单个子部分中就消耗了 2.5 秒 LCP 预算的一半以上。

依赖链是导致加载延迟时间长的常见原因。在较简单的情况中,一个页面加载样式表,在浏览器进行布局后,设置一个背景图像,该图像最终将成为最大内容绘制(LCP)。在浏览器知道开始下载 LCP 图像之前,所有这些步骤都必须发生。

使用 HTTP Archive 公开抓取数据,其中记录了“发起者”从 HTML 文档到 LCP 图片的网络请求链,您可以看到请求链长度与 LCP 速度较慢之间有明确的关联。

<img src="https://fs.lwmc.net/uploads/2024/09/1727666484641-202409301121003.webp" alt="直观呈现从属请求链与 LCP 之间的关系的图表。LCP 中间值从 2,150 毫秒(包含 0 个依赖请求)上升到 2,540 毫秒(有 1 个依赖请求)到 2,850 毫秒(有 2 个依赖请求)" style="zoom:50%;" />

关键是要尽快让浏览器知道 LCP 是什么,这样浏览器就能开始加载,即使在页面布局中有可用位置之前也是如此。您可以使用一些工具完成此操作,例如在 HTML 中使用经典的 <img> 标记(这样预加载扫描器可以快速找到它并开始下载),或者使用 <link rel="preload"> 标记(或 HTTP 标头)来标记不属于 <img> 的图片。

帮助浏览器确定要优先处理的资源也很重要。如果您的网页在网页加载期间发出了很多请求,这一点尤为重要,因为浏览器通常只有在其中许多资源都已加载且布局已加载完毕之后才会知道 LCP 元素是什么。使用 fetchpriority="high" 属性为可能的 LCP 元素添加注解(并确保避免使用 loading="lazy"),可让浏览器明确知道应立即开始加载资源。

阅读有关优化加载延迟的更多建议

渲染延迟

呈现延迟时间用于衡量从浏览器加载并准备就绪 LCP 图片开始的时间,但出于某种原因,图片在屏幕上显示时会有延迟。有时,这是一个耗时较长的任务,在图片准备就绪时阻塞主线程,而在其他情况下,这可能是显示隐藏元素的界面选择。

对于网络上的典型来源,呈现延迟似乎并不大,但在优化期间,有时您可以创建渲染延迟,让之前在其他子部分花费的时间占到。例如,如果网页开始预加载 LCP 图片以便快速加载,则不会再有很长的加载延迟,但如果网页本身尚未准备好显示图片(例如,如果网页本身尚未准备好显示图片(例如,从会阻止内容呈现的大型样式表或客户端渲染应用中必须加载完所有 JavaScript 才能显示),则 LCP 会比它应该变慢,而且等待时间也会显示为呈现延迟。正因如此,在 LCP 方面,服务器端呈现或静态 HTML 通常具有优势。

如果您自己的内容受到影响,请参阅有关优化渲染延迟的更多建议

请检查所有这些子部分

很明显,要有效优化 LCP,开发者需要全面关注网页加载情况,而不仅仅是专注于优化图片。请每时每刻检查一次 LCP,因为目前改进的空间可能要大得多。

为了在字段中收集此类数据,web-vitals 库的归因 build 中会包含 LCP 子部分的计时。Chrome 用户体验报告 (CrUX) 尚未包含所有数据,但包含 TTFB 和 LCP 条目,因此是一个开始。我们希望将来在 CrUX 中包含这篇博文使用的数据,敬请关注更多相关新闻。

如需在本地测试 LCP 子部分,请尝试使用网页指标扩展程序本文中的 JavaScript 代码段。Lighthouse 还在其“Largest Contentful Paint 元素”中添加了细分。审核。您可以在开发者工具性能面板中查看更多 LCP 子部分建议(即将推出)。


来源:

前端妙妙屋 - 分享知识

本文系外文翻译,前往查看

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

本文系外文翻译,前往查看

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前端性能优化--数据指标体系
常常进行前端性能优化的小伙伴们会发现,实际开发中性能优化总是阶段性的:页面加载很慢/卡顿 -> 性能优化 -> 堆叠需求 -> 加载慢/卡顿 -> 性能优化。
被删
2024/05/15
4030
前端性能优化--数据指标体系
超全对照!前端监控的性能指标与数据采集
导语 | 前端监控可以让你更了解自己的网站,更早地发现和解决存在的问题,再通过优化来提升网站的性能和体验。那么,如何衡量一个网站的好坏?有什么指标?性能数据如何采集?本文围绕这些问题和你一起探讨。 一、为什么要做前端性能监控 可能你也有过这样的经历: 有用户反馈你的网站很慢,然后你立马紧张地在浏览器上打开用户反馈的网站。经过检查,可能你的网站一切正常,也可能你的网站真的很慢,甚至打不开了。 有一天老板问你:“咱们的网站性能体验怎么样?”你该如何回答?“挺好的,很快,这个月没有发生过故障....”老板再
腾讯云开发者
2021/06/02
4.3K0
轻松改善您网站上最大的内容绘制 (LCP)
优化您在网站上提供的用户体验对于任何在线业务的成功都至关重要。谷歌确实使用不同的用户体验相关指标来为 SEO 对网页进行排名,并继续提供多种工具来衡量和提高网络性能。
玖柒的小窝
2021/09/10
4.7K0
轻松改善您网站上最大的内容绘制 (LCP)
Sentry Web 性能监控 - Web Vitals
Web Vitals 是谷歌定义的一组度量指标,用于度量渲染时间(render time)、响应时间(response time)和布局偏移(layout shift)。每个数据点都提供了关于应用程序总体性能的见解。
为少
2021/09/17
2.8K0
解读新一代 Web 性能体验和质量指标
衡量一个 Web 页面的体验和质量一直有非常多的工具和指标 ... 每次我们去关注这些指标的时候都会非常痛苦,因为这些指标真的是又多又难理解,测量这些指标的工具也非常多。
ConardLi
2020/06/01
2.2K0
基于 RUM 的前端优化理论与实践 - 性能篇(一)
作者:李振,腾讯云前端性能监控负责人 前言 对于前端来说,最重要的是体验,而在前端体验中,最为核心的就是性能。 相信大多数用户接入前端性能监控(RUM)都是为了通过 RUM 质量评价体系来验证前端性能和质量如何,而直接影响性能和质量的则是一系列的指标,因此了解页面性能指标显得格外重要! 前端性能监控 RUM 是腾讯云的大前端领域页面质量和性能监控平台,聚焦提升用户体验。了解详情 通俗点说,某用户想了解页面访问速度快,是否快,究竟有多快?怎么衡量?需要一个中立的裁判来裁决,而 RUM 的角色正是这个裁
腾讯云可观测平台
2021/09/10
9590
浏览器之性能指标-LCP
前几天,我们写了关于Chrome的FCP,看后台数据,反响还是不错的。那么,今天我们继续讲另外一个比较重要的性能指标LCP。
前端柒八九
2023/08/10
2.1K0
浏览器之性能指标-LCP
前端性能优化学习 02 Web 性能指标「建议收藏」
我们已经知道性能的重要性,但当我们讨论性能的时候,让一个网页变得更快,具体指哪些内容?
全栈程序员站长
2022/09/29
1.8K0
前端性能优化学习 02 Web 性能指标「建议收藏」
腾讯企鹅辅导 H5 性能极致优化
H5 项目是企鹅辅导的核心项目,已迭代四年多,包括了课程详情页/老师详情页/报名页/支付页面等页面,构建产物用于企鹅辅导 APP/H5(微信/QQ/浏览器),迭代过程中了也累积了一些性能问题导致页面加载、渲染速度变慢,为了提升用户体验,近期启动了 “H5 性能优化” 项目,针对页面加载速度,渲染速度做了专项优化,下面是对本次优化的总结,包括以下几部分内容:
winty
2021/08/24
1.4K0
腾讯企鹅辅导 H5 性能极致优化
面试必问——前端页面性能指标基本介绍
导语 | 面试的时候问页面性能有哪些指标,却经常得到合并文件、压缩资源等优化手段的答案,是时候整体盘一下“性能指标”了。 1. 基本指标介绍 首先前端性能指标一般分为以下几种: 首屏绘制(First Paint,FP) 首屏内容绘制(First Contentful Paint,FCP) 可交互时间(Time to Interactive,TTI) 最大内容绘制(Largest Contentful Paint,LCP) 首次有效绘制(First Meaning Paint, FMP) FP 是时间线上的第
用户1097444
2022/06/29
3.7K0
面试必问——前端页面性能指标基本介绍
【总结】2072- 前端常见性能优化策略
采用域名分片技术,将资源放到不同的域名下。接触同一个域名最多处理6个TCP链接问题。
pingan8787
2024/06/19
1940
【总结】2072- 前端常见性能优化策略
Sentry中的Web指标学习
Web 指标是一组由 Google 定义的指标,用于衡量呈现时间、响应时间和布局偏移。每个数据点都提供有关应用程序整体性能的见解。
玖柒的小窝
2021/11/06
2.5K0
Sentry中的Web指标学习
浏览器之性能指标_FCP
在前几天,我们写了,关于如何利用fetchpriority对页面资源进行优先级的处理。
前端柒八九
2023/08/01
1.8K0
浏览器之性能指标_FCP
Web性能优化:不要与浏览器预加载扫描器对抗
优化页面速度的一个被忽视的方面就是要对浏览器的内部结构有一定的了解。浏览器进行了某些优化,以提高性能,而我们作为开发者却无法做到这一点——但前提是我们不能无意中阻挠这些优化。
智影Yodonicc
2022/05/17
5.5K2
Web性能优化:不要与浏览器预加载扫描器对抗
Web页面全链路性能优化指南
性能优化不单指优化一个页面的打开速度,在开发环境将一个项目的启动时间缩短使开发体验更好也属于性能优化,大文件上传时为其添加分片上传、断点续传也属于性能优化。在项目开发以及用户使用的过程中,能够让任何一个链路快一点,都可以被叫做性能优化。
唐志远
2022/10/27
2K0
Web页面全链路性能优化指南
Web性能领域常见的专业术语
编者按:本文作者Berwin,W3C性能工作组成员,360导航资深前端工程师。《深入浅出Vue.js》作者。
桃翁
2020/02/19
1.7K0
前端性能优化之利用 Chrome Dev Tools 进行页面性能分析
我们经常使用 Chrome Dev Tools 来开发调试,但是很少知道怎么利用它来分析页面性能,这篇文章,我将详细说明怎样利用 Chrome Dev Tools 进行页面性能分析及性能报告数据如何解读。如果你认真看了本文,一定能学会分析,没学会,你来找我~
Nealyang
2020/02/19
2.8K0
前端监控 SDK 的一些技术要点原理分析
本文要讲的就是其中的第一个环节——数据采集与上报。下图是本文要讲述内容的大纲,大家可以先大致了解一下:
谭光志
2022/03/24
2.4K0
前端监控 SDK 的一些技术要点原理分析
性能优化到底应该怎么做
TL;DR: 当我们在做性能优化的时候,我们究竟在优化什么?做性能优化需不需要了解底层的东西?需要了解到什么程度?浏览器底层是一个什么架构?浏览器渲染的本质究竟是什么?哪些方面对用户的体验影响才是最大的?有没有业内一些通用的标准或标杆参考?都1202年了,雅虎军规还有没有用?性能分析工具都有哪些?我们从哪方面进行分析才是合适的?
010101011001
2021/05/15
2.9K0
性能优化到底应该怎么做
目前为止整理最全的前端监控体系搭建篇(长文预警)
PV(page view) 是页面浏览量,UV(Unique visitor)用户访问量。PV 只要访问一次页面就算一次,UV 同一天内多次访问只算一次。
前端达人
2022/04/18
13K1
目前为止整理最全的前端监控体系搭建篇(长文预警)
相关推荐
前端性能优化--数据指标体系
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档