灯塔检测隐形布局变化? 难以置信的高CLS

如何解决灯塔检测隐形布局变化? 难以置信的高CLS

我正在优化 WordPress 网站的速度(目前仅在移动设备上),除 CLS 外都取得了成功。在优化 CSS 交付(使用 WP-Rocket)后,CLS 变得非常高,但我没有看到任何布局变化,即使我使用开发工具(性能测试)也是如此。 (在移动设备上)

示例如下:https://trustmyscience.com/israel-a-pratiquement-eradique-la-covid-19/

  1. Results here,with CSS delivery optimization

所以这似乎是一种无形的布局转变,Lighthouse 认为这是一种真正的布局转变。 Lighthouse 向我显示问题来自 <div class="entry-content body-color clearfix link-color-wrap progresson">。所以,这似乎与所有文章内容的一些“包装”有关,可能会转移到背景中(不可见),因为某些 CSS 规则可能?

  1. Here,the element with the highest layout shift
  2. The element with the highest layout shift (detail)

当我停用 CSS 交付优化时,CLS 几乎回到 0(但 LCP 太高)。

  1. Results WITHOUT CSS delivery optimization

由于 LCP 的重要性,我需要此 CSS 交付优化,但由于 Core Web Vitals 中引入了 CLS,我现在还需要解决此问题,并且需要找到 Lighthouse 检测到的 LS。另外,也许 Lighthouse 需要对此进行更正?因为它不是可见的布局转变...

您知道如何解决这个问题吗?或者你认为我需要联系 LS 开发者向他们展示这个吗?

预先感谢您的帮助。

问候,

解决方法

CLS 是可见的,它是字体。

您没有注意到,当您访问页面时,文本会被调整大小吗?这是 CLS 的常见原因。

如何解决?

在本地提供您的字体。不要使用任何插件,如 OMGF。手动完成。

  1. 下载字体。选择 2 种字体,一种用于正文,另一种用于标题。您不需要粗体、斜体或粗体+斜体字体。这些将由用户的浏览器应用。
  2. 转换为 woff2(只有 woff2 就足够了,没有遇到任何问题)
  3. 将其上传到您的服务器
  4. 添加字体 CSS 以声明字体
  5. 使用 CSS 元素应用字体
  6. 如果您使用任何 WP 主题或构建器,请禁用 Google 字体
  7. 预加载字体

这将解决 CLS 问题,也将减少总阻塞时间。

,

可能通过自托管字体而不是调用 Google Fonts API 来提高性能,但字体不是这里的主要问题。 Javascript 是。

这个网站有很多Javascript,所以主线程忙着下载、解析和执行。

我使用 Moto 4G 配置文件运行了 Lighthouse(启用了清除存储和模拟节流)和 WebPageTest

正如您从 Chrome DevTools 和 WebPageTest 中看到的那样,花费在主线程上的大约 56% 的处理时间是由于脚本编写的。你真的需要所有的 Javascript 吗?

这是我在 Chrome DevTools Performance 面板中注意到的:

  • 似乎有 5 个 front-end.js 脚本(和 1 个 min-front.js)。它们是重复的吗?
  • 您是否需要带有 gsap 和 ScrollTrigger 的动画?
  • lazyload.min.jsareimagesloaded.js 不是在做同样的事情吗? (我可能错了)
  • 您要导入整个 lodash 库吗?如果是这样,请尝试导入 just the functions you are actually using
  • 您真的需要 Intersection Observer 的 polyfill 吗?我认为所有现代浏览器都support it natively nowadays

Chrome DevTools Performance panel showing JS requests

WebPageTest main thread processing breakdown

CLS 基本上是页面上发生的所有意外布局变化的总和。从下图中的橙色虚线可以看出,4 个 .woff2 字体文件对 CLS 有贡献:获取字体后立即发生第一次布局转换。

first layout shift caused by fonts

但正如我所说,我会专注于删除所有不必要的 Javascript。特别是,我会检查第三方 JS,比如来自 choices.consentframework.com 的 JS,它需要 1730 毫秒来加载并占内容大小的 25%(见下文)。

choices.consentframework.com takes 1730ms to load

choices.consentframework.com is 25% of the content size

JavaScript 之后,专注于图像

Chrome DevTools 中的性能面板显示了大量对图像的请求。您是只获取视口中的图像,还是页面上的所有图像?

a lot of requests for images

这些图片中的大多数是 WebP 并且似乎已经优化过,但也有一些 GIF,它们是 really bad for performance。这些 GIF 似乎是由 https://www.viously.com/ 提供的(我猜是广告服务器,我还是第一次看到)。

GIFs are bad for web performance

最后但并非最不重要的一点,请仔细检查您的所有 <img><video> 是否都设置了 sizewidth 属性。图像和视频replaced elements具有内在尺寸,忘记在 HTML 中设置图像尺寸是布局变化的常见原因。

另请参阅 this article by Addy Osmani,了解有关如何优化 CLS 的更多提示。

layout shifts

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res