2024 年 Web 核心性能指标CLS解读

然而,绿色方块的起始位置确实会发生变化,但由于它已经部分移出了视口,所以在计算冲击分数时,不可见区域并不会被考虑在内。两个帧中绿色框的可视区域(用红色虚线矩形表示)的联合与第一个帧中50%视口的绿色框的区域相同。冲击分数为0.5。

距离分数用紫色箭头表示。绿框已经向下移动了大约14%的视口,所以距离分数是0.14。

布局位移得分为0.5 x 0.14 = 0.07。

多个不稳定元素

在上面的第一帧中,有一个动物的API请求的四个结果,按字母顺序排序。在第二帧中,更多的结果被添加到排序列表中。

列表中的第一项(“Cat”)不会在帧之间改变它的起始位置,所以它是稳定的。类似地,添加到列表中的新项以前并不在DOM中,因此它们的起始位置也不会改变。但标有"狗"、"马"和"斑马"的物品都改变了它们的起始位置,使它们成为不稳定的元素。

红色的虚线矩形再次代表这三个不稳定元素的前后区域的结合,在这个例子中大约是视口区域的38%(撞击率为0.38)。

箭头表示不稳定元素从起始位置移动的距离。用蓝色箭头表示的"斑马"元素移动得最多,移动了视口高度的30%左右。这个例子中的距离分数是0.3。

布局位移分数是0.38 x 0.3 = 0.1172。

预期 VS 意外的布局变化

并不是所有的布局变化都是不好的。事实上,许多动态web应用程序经常改变页面上元素的起始位置。

只有在用户非预期的情况下,布局的改变才是糟糕的。另外,在响应用户交互时(点击一个链接,按下一个按钮,输入一个搜索框等等)出现的布局变化通常是好的,只要这种变化发生在距离交互足够近的地方,用户能够清楚地看到这种关系。

动画和过渡是更新页面内容的好方法,不会让用户感到意外。页面上突然移动内容几乎总是会造成糟糕的用户体验。但是,从一个位置逐渐自然地移动到另一个位置的内容通常可以帮助用户更好地理解发生了什么。

CSS transform属性允许你在不触发布局移位的情况下动画元素,比如使用transform: scale()代替改变高度和宽度属性。要移动元素,请避免更改顶部、右侧、底部或左侧属性,可以使用transform: translate()代替。

如何衡量CLS

1、可以使用lighthouse和performce检测CLS。

2、手动测量 可以使用布局不稳定性API。创建一个PerformanceObserver,该observer侦听意外的布局移动元素,将它们累加,并将它们记录到控制台。

let cls = 0;

new PerformanceObserver((entryList) => {

for (const entry of entryList.getEntries()) {

if (!entry.hadRecentInput) {

cls += entry.value;

console.log(‘Current CLS value:’, cls, entry);

}

}

}).observe({type: ‘layout-shift’, buffered: true});

如何改善CLS

首先,最常见的影响CLS的分数的有:

  • 未指定尺寸的图片

  • 未指定尺寸的广告、嵌入元素、iframe

  • 动态插入内容

  • 自定义字体(引发FOIT/FOUT)

  • 在更新DOM之前等待网络响应的操作

因此,改善方法有:

  1. 最开始就设定好图片的尺寸,或者预留足够空间。这样能确保浏览器可以在加载图像时在文档中分配正确的空间量。还可以使用unsize -media特性策略在支持特性策略的浏览器中强制执行此行为。

  2. 除非响应用户交互,否则切勿在现有内容上方插入内容。这样可以确保可以预期发生任何版式移位。

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

ajax

1)ajax请求的原理/ 手写一个ajax请求?
2)readyState?
3)ajax异步与同步的区别?
4)ajax传递中文用什么方法?

ajax.PNG

前12.PNG

ajax

1)ajax请求的原理/ 手写一个ajax请求?
2)readyState?
3)ajax异步与同步的区别?
4)ajax传递中文用什么方法?

[外链图片转存中…(img-LiFT3E8o-1710582439750)]

[外链图片转存中…(img-odQFxxpB-1710582439750)]

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 26
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值