🖥️ 前端经典面试题专栏:性能优化之 懒加载
🧑💼 个人简介:一个不甘平庸的平凡人🍬✨ 个人主页:CoderHing的个人主页
🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️
👉 你的一键三连是我更新的最大动力❤️
一、回答点
在网页中延迟加载图片数据,提升用户体验,减少无用资源加载
二、深入回答
懒加载的概念
懒加载又叫 延迟加载、按需加载,在网页中延迟加载图片数据,是一个比较好的网页性能优化的方式之一。在较长的网页中,如果图片数据很多美,所有的图片一下都被加载出来,而用户只能看到可视窗口的一部分图片数据,这样就浪费了性能。
懒加载的特点
减少无用资源的加载:使用懒加载明显减少了服务器的压力,也减少了浏览器的负担。
提升用户的体验:同时加载很多图片,用户需要等待的时间较长,会影响用户体验,使用了懒加载可以大大的提高用户体验。
防止加载过多图片影响其他资源文件的加载:影响网站应用的正常使用
懒加载的实现原理
图片的加载是由src引起的,当你对src进行赋值时,浏览器就会请求图片资源,根据它我们可以使用HTML5的 data-xxx 属性来存储图片路径,在需要加载图片的时候 将 data-xxx 中图片的路径赋值给src 就实现了图片的懒加载。
data-xxx中的xxx可以是自定义的,这里使用data-coder来定义。
懒加载的实现在于用户需要加载哪张图片,在浏览器中,可视区域内的资源就是需要的资源。当图片出现在可视区域内时,获取图片的真实地址并赋值给图片
window.innerHeight =》 浏览器可视的高度
document.body.scrollTop || document.documentElement.scrollTop =》 浏览器滚动过的距离
imgs.offsetTop =》 是元素顶部距离文档顶部的高度(包括滚动条距离)
图片加载条件: img。offsetTop < window.innerHeight + document.body.scrollTop
代码实现:
// 首先获取到 所有图片
let imgs = document.querySelectorAll('img');
function load() {
let scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
let heightT = window.innerHeight;
for(let i = 0; i < imgs.length; i++) {
if(imgs[i].offsetTop < scrollTop + heightT ){
imgs[i].src = imgs[i].getAttribute('data-coder')
}
}
}
window.onscroll = load()
懒加载和预加载的区别
懒加载和预加载都是提高网页性能的方式,他们的区别是 一个为提前加载,一个为慢加载甚至不加载。懒加载对服务器有一定的缓解压力作用,而预加载会增加服务器的压力。