在这里,主HTML解析器在开始处理元素中的图像标记之前,由于加载和处理CSS而受阻,但预加载扫描器可以在原始标记中向前看,找到图像资源,并在主HTML解析器解除封锁之前开始加载。...如果这两个性能问题不存在,预加载扫描器就不会很有用。要弄清楚一个网页是否从预加载扫描器中受益,关键取决于这些阻塞现象,为了做到这一点,我们可以为请求引入一个人为的延迟,以找出预加载扫描器的工作位置。...在最后一个预装异步脚本的演示中,样式表仍然以 "最高 "优先级加载,但脚本的优先级已经提升到 "高"。 资源优先级可以在现代浏览器的网络标签中发现。...当预加载扫描器不能提前获取图像资源时,可能是在页面的样式表阻止渲染时,LCP就会受到影响。 重要的是 关于优化LCP的更多信息,超出了本文的范围,请阅读优化最大内容的绘画。 解决办法是改变图像标记。...当标记的有效载荷包含在浏览器中并完全由JavaScript渲染时,该标记中的任何资源对预加载扫描器来说都是不可见的。这就延迟了重要资源的发现,这当然会影响到LCP。
在 HTML文档 中引用资源的位置或顺序也会影响资源的优先级(例如在 viewport 中的图片资源可能具有高优先级,而在 link> 标签中加载的,阻塞渲染的 CSS 则拥有更高的优先级)。...例如,我们将网页关键的背景图像进行预加载,可以改进最大内容绘制指标 ( LCP )。...浏览器为 JavaScript fetch API 异步获取资源或数据分配了高优先级,但是某些场景下你可能不希望以高优先级请求所有资源。...importance 属性 你可以使用一个 importance 属性来更细力度的控制资源加载的优先级,包括 link、img、script 和 iframe 这些标签。...比如,在 Google Flights 这个网页中,影响它 LCP 指标的主要原因是它的背景图片,现在我们用 importance 属性提升它加载的优先级: lcp-image.jpg
在 空闲模式Idle mode 中,浏览器会「在页面空闲时加载资源」。它会根据资源的优先级和是否可见来决定何时加载资源,以提高性能和用户体验。...当CSS的媒体类型不匹配时,「预加载扫描器」不会获取该CSS,而只有当主解析器到达时才会处理它,这通常意味着它将在非常晚的时候被获取,并且具有"late"优先级。 优先级变化 图像始终以低优先级开始。...如果在布局过程中发现「图像在视口内」,则优先级将提升为高优先级,尽管这可能发生在加载过程中的相当晚的阶段。 位于「页面底部并阻塞的脚本」为中等优先级。...LCP 图像应包含在文档标记中。如果无法实现,请使用 preload 告知浏览器在请求前下载图像。 尽量避免阻塞资源。...如果 LCP 图像以低优先级下载,可以使用 fetchpriority 提示浏览器提前下载图像。 ---- 后记 「分享是一种态度」。
预加载资源的优先级 现代浏览器有一种受到光房支持的方式来提前获取当前页面最终需要的资源:link rel="preload" ... />。...当我们将它放置在 HTML 的 中时,浏览器将被指示以 “高” 优先级尽快开始下载它。...浏览器中的预加载扫描器已经非常擅长此类事情了,所以,预加载通常最适合用于后来发现的资源 - 任何未由 HTML 直接加载的资源,例如通过内联样式属性加载的背景图像。...,来让我们在一次预加载多个资源时发出更精准的优先级信号。...在上面的例子中,浏览器甚至不会在首屏就请求屏幕外的图像,而是会等到它们更靠近视口时才开始。
Image 加载优化 为了优化 LCP 的时间,我们可以让使静态 HTML 中的图片资源更易于被发现,这有可以让浏览器的预加载扫描程序更早的找到并加载它。...而使用传统的 img 元素或添加预加载链接等方式则可以使图像资源被预加载扫描程序发现,并被浏览器尽早加载。...fetch proirity API 新的 fetch proirity API 允许我们自定义标记资源的优先级。...只需将 fetchprority 属性添加到我们的图像或预加载 LCP 元素中,就可以使浏览器更早地开始下载它们,并具有更高的优先级,这可以对 LCP 时间产生很大的影响。...一个页面可能在初始加载时具有很大的 CLS ,因为随着其他内容(如图像和广告)的加载,页面的结构会一直产生变化,从而影响 CLS。当然,我们应该尽量在首屏页面渲染时避免加载这些内容。
预加载密钥请求/预连接到所需的源 在你的 HTML 中声明预加载链接,以指示浏览器尽快下载关键资源。...确定关键代码后,将该代码从呈现阻止 URL 移动到 HTML 页面中的内联脚本标记。 在 HTML 页面头部的样式块中内嵌第一次绘制所需的关键样式,并使用预加载链接异步加载其余样式。...你还可以使用代码拆分,它将代码拆分为可以按需加载的包。 扫描模块以查找重复项 从包中删除大型重复的 JavaScript 模块以减少最终包的大小。...保持主文档的服务器响应时间较短,因为所有其他请求都依赖于它。 图像处理 适当大小的图像 提供适当大小的图像以保存蜂窝数据并缩短加载时间。...图像元素具有明确的宽度和高度 在图像元素上设置明确的宽度和高度,以减少布局偏移并改善 CLS。 预加载最大内容绘画 (LCP) 预加载 LCP 元素使用的图像以缩短 LCP 时间。
当它放在文档的中时,浏览器会被指示尽快以“高”优先级下载它。 公平地说,浏览器中的预加载扫描器已经非常擅长这方面的工作。...因此,预加载通常最适用于晚些时候发现的资源 - 任何不直接由你的HTML加载的东西,比如通过内联样式属性加载的背景图像。但它也适用于任何其他可能不像你希望的那样被浏览器优先考虑的东西。...例如:默认情况下,Chrome 会以非常高的优先级加载字体,但如果某人的网络连接速度很慢,它会使用备用字体并降低该优先级。...优先化 标签 页面上带有src属性的任何普通在获取时都会得到高优先级,但这有一个权衡:在它加载并执行之前,它会阻止解析页面的其余部分。...非阻塞,但高优先级的脚本 大多数时候,这种行为都很好。但有时,你可能希望脚本既以“高”优先级加载,又异步加载。 一个可能的场景是在落地页的英雄部分安装一个小的 SPA。
1.优化你的图片 在大多数网站上,首屏内容通常包含一个大图像,该图像被考虑用于 LCP。它可以是英雄形象、横幅或旋转木马。因此,优化这些图像以获得更好的 LCP 至关重要。...图像 CDN 将始终处于技术发展的边缘,您始终可以以最少的持续投资获得最佳功能。...以较轻的格式交付您的图像 ImageKit 检测用户的浏览器是否支持现代较轻的格式,如 WebP 或 AVIF,并实时自动以最轻的格式提供图像。...预加载关键资源 在某些情况下,浏览器可能不会优先加载影响 LCP 的视觉上重要的资源。例如,折叠上方的横幅图像可以指定为 CSS 文件中的背景图像。...对于此类资源,您可以通过向HTML 文档的 head 部分添加link>带有rel= "preload"属性的标签来预加载它们。 <!
---- loading 属性 根据与设备视口的位置关系,Chrome以不同的优先级加载图像。视口下方的图像以较低的优先级加载,但它们仍在页面加载时被获取。...eager:浏览器的默认加载行为,与不包含属性时相同,即无论图像在页面上的位置如何,都会加载图像。...例如,实施原生延迟加载并使所有图像遵循延迟加载行为的网站可能会得到较低的LCP得分。 要解决此问题,只需使用属性loading="eager"将可能被选为最大内容绘制时间元素的主要或特色图像进行标记。...如果阻塞渲染的URL中存在非关键代码,可以将其保留在URL中,并使用async或defer属性标记该URL。...在加载页面时,浏览器仅会阻塞首次渲染,以检索与用户设备匹配的样式表。 最后,压缩CSS文件,删除多余的空白字符和字符。这可以确保向用户发送最小的资源包。 ---- 9.
实验性的 fetchpriority 属性让开发人员对资源的优先级更加精细地控制,允许我们相对于同类资源标记资源为 'high' 和 'low' 优先级。...例如,我们可以仅在用户交互后显示的图像上使用 fetchpriority="low"(无论该图像是否在用户的视口中),以优先处理页面上的可见图像,或使用 fetchpriority="high" 优先处理我们知道页面渲染后立即可见的视口...CLS高的情况最多只是一种麻烦,在最坏的情况下是导致用户错误的原因,例如,在用户单击时“取消”按钮移动到先前被“确认”按钮占用的位置。...现代浏览器会在页面渲染前将这些值除以对方,以确定img元素的内在长宽比,从而允许它在布局渲染时保留图像占据的空间。...作为一项规则,我们应该始终在上使用height和width属性,其值应与图像源的内在大小匹配,只要我们确保指定了height:auto和max-width:100%,以覆盖HTML属性中的高度即可
浏览器通常很擅长发现标记中的图像并快速加载它们。那么为什么会有问题呢?开发者没能很好地让 LCP 图像可被发现。 我在 2022 年的 Web 年鉴中写过有关 LCP 可发现性问题的内容。...在去年,我说17.8% 的拥有 LCP 图像的页面以某种方式进行了懒加载,而 HTTP Archive 的最新数据显示,稍微有所改进,目前有 16.8% 的页面采用了懒加载。...如果你采用了懒加载,并不是不可能获得快速的 LCP,但肯定不会有好处。LCP 图像永远不应该被懒加载。 需要明确的是:懒加载对性能有好处,但仅适用于非关键内容。...如果你发送到客户端的唯一标记是一个由 JavaScript 渲染的 容器,浏览器就无法加载 LCP 图像,直到它最终在 DOM 中被发现。...这个属性向浏览器暗示应该高于默认优先级加载图像。在 Chrome 中,默认情况下图像通常是低优先级的,因此这可以给它们带来显著的性能提升。 自去年以来发生了很大的变化!
同样的,服务器也不知道图像是否立即可见(例如,在viewport中)或者尚未可见(用户需要向下滚动才能看到轮播中的第二张图)。至于新鲜上架的fetchpriority属性,服务器更是闻所未闻。...举个简单的例子,预取资源通常会在中的link>元素中指示,但仅在当前页面加载完成时由浏览器请求。...实际HTTP标头只能用于表达资源的初始优先级,一旦稍后需要更新优先级(比如延迟加载的图像最初获得低优先级,但在滚动至视图内时需要切换至高优先级),那单靠HTTP标头就实现不了了。...受测试页面的性质决定(仅包含初始加载),所以我无法观察浏览器是否真的发送了更新。但在原理上,Chromium肯定会为图像执行此操作(先将其视为低优先级,之后在图像需要可见时再更新为高优先级)。...另外还有两个明确的例子,能够说明单纯强调优先级还不够:预加载和懒加载都根本不会影响到图像优先级!
读者可将以上4种情况分别带入到如下的渲染流程中走一遍。就能理解浏览器的完整渲染过程了。 【HTML】 浏览器收到html资源后先预扫描link />和并加载对应资源。...等待中:请求发出至接收响应的时间也可以理解为服务端处理请求的时间 下载内容:下载响应的时间 网络请求的优先级 浏览器会根据资源的类型决定优先请求哪些资源,优先级高的请求能够优先被加载。...通过DNS预解析技术可以很好的降低延迟,在访问以图片为主的移动端网站时,使用DNS预解析的情意中下页面加载时间可以减少5%。...浏览器在页面onload完成一段时间后,发现还没有引用预加载的资源时,浏览器会在控制台输出下图的提示信息。...如何减少重排与重绘 脱离文档流(绝对定位、固定定位),脱离文档流的元素进行重排不会影响到其他元素。 图片渲染时增加宽高属性,宽高固定后,图片不会根据内容动态改变高度,便不会触发重排。
脚本根据它们在文件中的位置是否异步、延迟或阻塞获得不同的优先级: 网络在第一个图片资源之前阻塞的脚本在网络优先级中是中级 网络在第一个图片资源之后阻塞的脚本在网络优先级中是低级 异步/延迟/插入的脚本(...无论在什么位置)在网络优先级中是很低级 图像在可视窗口中比不在视口中的图像(具有更高的优先级,因此在某种程度上, Chrome 将会尽量懒加载这些不在视口中的图片。...较低优先级的图片出现在视口中时,该图片的优先级就会得到提升(但是注意已经在布局完成后的图片优先级不会在更改)。 使用“as”属性预加载的资源将具有与它们请求的资源类型相同的资源优先级。...因此,preload 在标记中声明以被 Chrome preload 扫描器扫描。...其基本思想是以高粒度维护工件(而不是整体捆绑),所以任何应用都可以按需加载依赖或者预加载资源并放在缓存中。
这篇文章查看了来自网络上真实页面加载的现场数据,以确定开发人员应该将优化工作重点放在哪里。经典 LCP 建议:缩减图片大小!...大多数 LCP 表现不佳的来源在下载 LCP 映像时所花的时间都不到其 p75 LCP 时间的 10%。是的,你应确保对图片进行优化,但这只是改进 LCP 的一个环节。...在较简单的情况中,一个页面加载样式表,在浏览器进行布局后,设置一个背景图像,该图像最终将成为最大内容绘制(LCP)。在浏览器知道开始下载 LCP 图像之前,所有这些步骤都必须发生。...您可以使用一些工具完成此操作,例如在 HTML 中使用经典的 标记(这样预加载扫描器可以快速找到它并开始下载),或者使用 link rel="preload"> 标记(或 HTTP 标头)...例如,如果网页开始预加载 LCP 图片以便快速加载,则不会再有很长的加载延迟,但如果网页本身尚未准备好显示图片(例如,如果网页本身尚未准备好显示图片(例如,从会阻止内容呈现的大型样式表或客户端渲染应用中必须加载完所有
优化策略 关键资源个数越多,首次页面加载时间就会越长 关键资源的大小,内容越小,下载时间越短 优化白屏:内联css和内联js移除文件下载,较小文件体积 预渲染,打包时进行预渲染 使用SSR加速首屏加载(...性能时间线使用高精度的时间戳,且可以在开发者工具中显示。你还可以将相关数据发送到用于分析的端点,以根据时间记录性能指标。...将数据缓存到HTTP缓存中 link rel="preload" href="style.css" as="style"> 关键渲染路径 重排(回流)Reflow: 添加元素、删除元素、修改大小、...svg格式图片:相比于jpg和jpg它的体积更小,渲染成本过高,适合小且色彩单一的图标; 图片优化: 避免空src的图片 减小图片尺寸,节约用户流量 img标签设置alt属性, 提升图片加载失败时的用户体验..."red" : "yellow" ); 删除空行、注释、减少无意义的单位、css进行压缩 使用外链css,可以对CSS进行缓存 添加媒体字段,只加载有效的css文件 link href="index.css
加载不必要的图片可能影响 LCP 加载网页时,用户在首屏看不到的图片可以延迟加载,这样它们就不会对 LCP 造成影响。...预加载 上面提到了,图像的文件大小越大,下载所需的时间就越长。网页中的大图可能是触发最大内容绘制指标 ( LCP )的最重要元素,对一些大图进行预加载可能是个好主意。...使用 元素时,HTML 标题中可能包含预加载提示: link rel="preload" as="image" href="important.png"> 不管使用什么框架,一个设计良好的图像组件应该提供一种方法来调整图像的加载顺序...在 Next.js 的 Image 组件中,开发人员可以使用 priority 属性指示适合预加载的图像。...Next.js Image 组件支持通过 placeholder 属性对图像进行渐进式加载,用于在加载实际图像时显示低质量或模糊的图像。
如果元素被删除,LCP算法将不再考虑该元素,如果被删除的元素刚好是 “绘制面积” 最大的元素,则使用新的 “绘制面积” 最大的元素创建一个新的性能条目。...在第一个示例中,新内容被添加到 DOM 中,并且更改了最大的元素。在第二个示例中,布局发生更改,以前最大的内容从视口中删除。通常情况下,延迟加载的内容要大于页面上已存在的内容。...对重要的资源进行预加载,比如为 style 标签添加 rel="preload" 属性 使用 Gzip 和 Brotli 压缩页面资源,降低传输时间 使用 service worker 缓存资源 服务端渲染...将非 UI 操作移至单独的工作线程可以减少主线程的阻塞时间,从而改善 FID 。 CLS 视觉稳定性 ? 您是否曾经在访问一个 Web 页面时发生下面的情况?...不要使用无尺寸元素 图像和视频等元素上始终需要包括 width 和 height 尺寸属性,现代浏览器会根据图像的 width 和 height 属性设置图像的默认长宽比,知道纵横比后,浏览器就可以为元素计算和保留足够的空间
❞ 在我们的测试中,我们获得了一个CLS得分为零,这意味着没有布局位移。针对这一特定测试而言是如此。现在让我们将其与另一个得分没有那么高的网站进行比较。...,我们还可以使用link rel=preload>预加载字体文件 - 这样,它们将作为优先下载的资源。...当处理响应式图像时,可以使用srcset属性来指定不同大小和分辨率的图像源,让浏览器根据需要选择最合适的图像进行加载和显示。...当浏览器根据设备的屏幕大小和分辨率选择加载图像时,它会根据srcset属性和sizes属性的规则选择最合适的图像源,并自动调整图像的大小。...为广告预留空间 我们的网站是否显示第三方广告?网站上最常见的做法是在加载期间或加载后动态添加广告内容。在页面的其余部分继续加载时,非广告内容可能会对用户可见。