前端性能优化---懒加载

111 阅读10分钟

1.懒加载使用场景

相信大家都使用过qq或者微信的一个功能,那就是qq空间,朋友圈。如果说我们一次性将所有的好友,发过的全部的动态一次性全部加载出来,请求的数据量肯定是很大的,就算后端性能优化的很好,请求速度很快,前端渲染到页面上也是很费时的,而且由于数据量过于庞大,当前窗口肯定是显示不了的,这个时候就需要懒加载登场了。

2.什么是懒加载

经过上面对懒加载使用场景的介绍,相信不难得出懒加载的特性,只请求当前窗口可见的数据或者比当前可视窗口多一部分的数据,渲染的时候也是同样的道理,这样无疑能够减少用户操作的等待时间、得到更好的用户体验。

3.实现方式

页面结构

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		
	</head>
	<body>
		<p> 6月25日左右,全国各地陆续公布高考分数,随之而来的志愿填报及录取是很多考生和家长的头等大事。近日,不少高校在2024本科招生政策发布会上介绍了学校本科生转专业的新规,进一步降低学生转专业申请门槛,政策灵活度更高,可选择次数更多。各大高校为何降低转专业申请门槛?这项政策如何更好落地?将给高等教育带来哪些改变和影响?
		</p>
		<p> 6月25日左右,全国各地陆续公布高考分数,随之而来的志愿填报及录取是很多考生和家长的头等大事。近日,不少高校在2024本科招生政策发布会上介绍了学校本科生转专业的新规,进一步降低学生转专业申请门槛,政策灵活度更高,可选择次数更多。各大高校为何降低转专业申请门槛?这项政策如何更好落地?将给高等教育带来哪些改变和影响?
		</p>
		<p> 6月25日左右,全国各地陆续公布高考分数,随之而来的志愿填报及录取是很多考生和家长的头等大事。近日,不少高校在2024本科招生政策发布会上介绍了学校本科生转专业的新规,进一步降低学生转专业申请门槛,政策灵活度更高,可选择次数更多。各大高校为何降低转专业申请门槛?这项政策如何更好落地?将给高等教育带来哪些改变和影响?
		</p>
		<p> 6月25日左右,全国各地陆续公布高考分数,随之而来的志愿填报及录取是很多考生和家长的头等大事。近日,不少高校在2024本科招生政策发布会上介绍了学校本科生转专业的新规,进一步降低学生转专业申请门槛,政策灵活度更高,可选择次数更多。各大高校为何降低转专业申请门槛?这项政策如何更好落地?将给高等教育带来哪些改变和影响?
		</p>

		<p> 6月25日左右,全国各地陆续公布高考分数,随之而来的志愿填报及录取是很多考生和家长的头等大事。近日,不少高校在2024本科招生政策发布会上介绍了学校本科生转专业的新规,进一步降低学生转专业申请门槛,政策灵活度更高,可选择次数更多。各大高校为何降低转专业申请门槛?这项政策如何更好落地?将给高等教育带来哪些改变和影响?
		</p>
		<p> 6月25日左右,全国各地陆续公布高考分数,随之而来的志愿填报及录取是很多考生和家长的头等大事。近日,不少高校在2024本科招生政策发布会上介绍了学校本科生转专业的新规,进一步降低学生转专业申请门槛,政策灵活度更高,可选择次数更多。各大高校为何降低转专业申请门槛?这项政策如何更好落地?将给高等教育带来哪些改变和影响?
		</p>
		<p> 6月25日左右,全国各地陆续公布高考分数,随之而来的志愿填报及录取是很多考生和家长的头等大事。近日,不少高校在2024本科招生政策发布会上介绍了学校本科生转专业的新规,进一步降低学生转专业申请门槛,政策灵活度更高,可选择次数更多。各大高校为何降低转专业申请门槛?这项政策如何更好落地?将给高等教育带来哪些改变和影响?
		</p>
		<p> 6月25日左右,全国各地陆续公布高考分数,随之而来的志愿填报及录取是很多考生和家长的头等大事。近日,不少高校在2024本科招生政策发布会上介绍了学校本科生转专业的新规,进一步降低学生转专业申请门槛,政策灵活度更高,可选择次数更多。各大高校为何降低转专业申请门槛?这项政策如何更好落地?将给高等教育带来哪些改变和影响?
		</p>

		<p> 6月25日左右,全国各地陆续公布高考分数,随之而来的志愿填报及录取是很多考生和家长的头等大事。近日,不少高校在2024本科招生政策发布会上介绍了学校本科生转专业的新规,进一步降低学生转专业申请门槛,政策灵活度更高,可选择次数更多。各大高校为何降低转专业申请门槛?这项政策如何更好落地?将给高等教育带来哪些改变和影响?
		</p>



		<p> 6月25日左右,全国各地陆续公布高考分数,随之而来的志愿填报及录取是很多考生和家长的头等大事。近日,不少高校在2024本科招生政策发布会上介绍了学校本科生转专业的新规,进一步降低学生转专业申请门槛,政策灵活度更高,可选择次数更多。各大高校为何降低转专业申请门槛?这项政策如何更好落地?将给高等教育带来哪些改变和影响?
		</p>
		<p> 6月25日左右,全国各地陆续公布高考分数,随之而来的志愿填报及录取是很多考生和家长的头等大事。近日,不少高校在2024本科招生政策发布会上介绍了学校本科生转专业的新规,进一步降低学生转专业申请门槛,政策灵活度更高,可选择次数更多。各大高校为何降低转专业申请门槛?这项政策如何更好落地?将给高等教育带来哪些改变和影响?
		</p>
		<p> 6月25日左右,全国各地陆续公布高考分数,随之而来的志愿填报及录取是很多考生和家长的头等大事。近日,不少高校在2024本科招生政策发布会上介绍了学校本科生转专业的新规,进一步降低学生转专业申请门槛,政策灵活度更高,可选择次数更多。各大高校为何降低转专业申请门槛?这项政策如何更好落地?将给高等教育带来哪些改变和影响?
		</p>
		<p> 6月25日左右,全国各地陆续公布高考分数,随之而来的志愿填报及录取是很多考生和家长的头等大事。近日,不少高校在2024本科招生政策发布会上介绍了学校本科生转专业的新规,进一步降低学生转专业申请门槛,政策灵活度更高,可选择次数更多。各大高校为何降低转专业申请门槛?这项政策如何更好落地?将给高等教育带来哪些改变和影响?
		</p>
		<div>
			<img class="img" data-src="./img/图片1.jpeg" />
		</div>
		<div>
			<img class="img" data-src="./img/图片2.jpeg" />
		</div>
		<div>
			<img class="img" data-src="./img/图片3.jpeg" />
		</div>
		
		<p> 6月25日左右,全国各地陆续公布高考分数,随之而来的志愿填报及录取是很多考生和家长的头等大事。近日,不少高校在2024本科招生政策发布会上介绍了学校本科生转专业的新规,进一步降低学生转专业申请门槛,政策灵活度更高,可选择次数更多。各大高校为何降低转专业申请门槛?这项政策如何更好落地?将给高等教育带来哪些改变和影响?
		</p>

		<p> 6月25日左右,全国各地陆续公布高考分数,随之而来的志愿填报及录取是很多考生和家长的头等大事。近日,不少高校在2024本科招生政策发布会上介绍了学校本科生转专业的新规,进一步降低学生转专业申请门槛,政策灵活度更高,可选择次数更多。各大高校为何降低转专业申请门槛?这项政策如何更好落地?将给高等教育带来哪些改变和影响?
		</p>
		<script src="js/new_file.js"></script>
	</body>
</html>

3.1 事件监听

大致的实现方式是通过监听scroll事件, 当我们鼠标进行滚动,我们就不断计算图片到视窗上面的距离和窗口显示区的高度, 然后比较这两者的大小,如果窗口显示区的高度小于图片到视窗的距离,那么说明当前的图片是看不到的,如果窗口显示区大于图片到视窗的距离,那么说明图图片已经进入可视范围。

//获取当前的图片
const imgs =  document.querySelectorAll('.img')
//监听事件
document.addEventListener('scroll',(e)=>{
	const viewHeight = window.innerHeight
	imgs.forEach((img)=>{
		//计算图片的高度
		const imgToTop = img.getBoundingClientRect().top
		if(imgToTop<=viewHeight){
			//进入可视区域
			const data_src = img.getAttribute('data-src')
			console.log(data_src);
			img.setAttribute('src',data_src)
		}
	})
})

3.2 IntersectionOberver

这个方法是基于js提供的一个构造方法,第一步就是创建IntersectionObserver的实例,第二步是提供要观察的元素,第三步是完成创建时的回调。这里的页面结构和第一页完全一致

1.我们首先还是将要懒加载的元素给获取到

const imgs =  document.querySelectorAll('.img')

2.然后我们就创建IntersectionOberver实例

const observer = new IntersectionObserver(callback)

3.然后我们就将要观察的元素给到这个实例

imgs.forEach((img)=>{
	observer.observe(img)
})

4.最后核心的一步

const callback = (entries)=>{
	entries.forEach((entry)=>{
		console.log(entry);
                
		if(entry.isIntersecting){//判断当前的元素是已经进入可视区域
			const img  = entry.target //当前的img
			const data_src = img.getAttribute('data-src')
			console.log(data_src);
			img.setAttribute('src',data_src)
			observer.unobserve(img)//去除观察
		}
	})
}

这样我们就有了两种方式对图片懒加载的实现,感谢大家的阅读,如有不太正确或有更好的实现方式,请各位及时指正,谢谢!!!