作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的一个网站的 LCP 非常糟糕,4.6。我意识到如果没有主动延迟加载我的图像,LCP 是 2.0 。 TCB 也通过使用延迟加载而增加。所以我想这一定是我的 JS 技能不好,所以可以给我一个提示吗?
我的实际代码:
let lazyImages = [...document.querySelectorAll('img[data-src],iframe[data-src],div[data-bg],header[data-bg]')];
let inAdvance = 300;
function lazyLoad() {
lazyImages.forEach(image => {
if ( !image.classList.contains( 'lazyloaded' ) && !image.classList.contains( 'none' ) && image.getBoundingClientRect().top <= window.innerHeight + inAdvance && image.getBoundingClientRect().bottom >= 0) {
if( image.hasAttribute( 'data-src' ) ){
image.src = image.dataset.src;
}
if( image.hasAttribute( 'data-bg' ) ){
image.setAttribute( 'style', 'background-image:url( ' + image.dataset.bg + ' );' );
}
image.classList.add('lazyloaded');
//image.onload = () => image.classList.add('lazyloaded');
}
})
}
window.addEventListener( 'scroll', lazyLoad, {passive: true} );
window.addEventListener( 'resize', lazyLoad, {passive: true} );
window.addEventListener( 'slick', lazyLoad, {passive: true} );
我已经尝试过用观察者替换,但 tcb 或 lcp 没有任何改进。
最佳答案
为什么删除延迟加载后我的最大内容绘制 (LCP) 时间会有所改善?
这往往是一个实现问题。
LCP 测量最大的油漆出现在页面上的时间。如果您使用延迟加载并且图像在“首屏”可见(不滚动)并且它们是页面上最大的绘制,那么它们将被报告为 LCP。如果仅显示图像的顶部,也可能是这种情况。
现在,如果您延迟加载它们并且您的 JavaScript 在页面加载顺序中加载较晚,则意味着图像将稍后下载,从而增加您的 LCP 时间。
修复步骤
<img>
或 <picture>
元素。'scroll'
上触发它被多次触发,我假设您在页面上有多个图像。
src
或背景
style
,从您的
lazyImages
中删除该项目列表。这会减少页面滚动时需要检查的项目数量,从而提高性能。
slick
的频率。 slider 会导致您的函数被调用,因为这也可能导致性能问题。
关于javascript - 使用 LazyLoad 时最大的 Contentful Paint 显着增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63962906/
我是一名优秀的程序员,十分优秀!