针对图片延迟加载的原生JS页面性能优化
在项目开发中,我们经常会遇到一个页面需要加载很多图片的情况。我们可以一次加载所有图片,但考虑到用户可能只能浏览部分图片。因此,我们需要优化图像加载,在浏览器窗口中只加载图像,在用户滚动时加载更多的图像。这种加载图片的方式叫做图片的懒加载,也叫按需加载或者图片的延迟加载。这样做的好处是:1。它可以加快页面第一屏的渲染速度;2.节省用户流量。
一.实现的想法
1.图像img标签定义了一个属性数据src来存储真实地址。
2.滚动页面时,检查所有img标签,判断是否出现在业务中。如果它们出现在视野中,继续判断它们是否已经装载。如果没有加载,请加载它们。
判断图片元素是否在浏览器视图中的示意图(手绘):
2.按照以下思路完成代码:
!doctype html html lang=' in ' head meta charset=' utf-8 ' title哎哎哎联署材料是吴登盛吗/title style * { 0边距:填充;框定:边界框;} ul{溢出3360隐藏;目录样式:无;} li{浮动3360左;宽度: 50%;高度: 200像素填色: 10px}李img {显示3330内嵌块;宽度: 100%;高度: 100%;}/style/head body div class=' container ' ul liimg src=' http http://cdn。com/book。吉尔根古。com/img/1。jpg ' alt=' data-src=' http 3http://cdn。com/book。吉尔根古。com/img/1。jpg '/Li liimg src=' http : ' alt=' data-src=' http http://cdn。com/book。吉尔根古。com/cn/吴经熊先生窗户。addevent listener(' scroll ',function(){ //嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨嗨img-什么-什么数组。原型。切片。应用(文档。getelement sbytagname(' Li ').foreach((Li)={ let img=Li。获取elementsbytagnname(' img ')[0];//你好你好img-什么切望着切望着切望着切望着切望着//你好你好img-什么阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆如果(校验和如何(img)!is fied(img)){ load img(img):})}://你好img-什么切望着切望着切望着切望着切望着函数校验和(img){让滚动顶部=文档。文档元素。滚动顶部;//你说什么让windowheight=窗口。内部高度;//绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿绿让offsettop=img。offsettop/阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云阿云文件名称绿筠小姐返回(偏移顶部滚动顶部偏移顶部(windowheight滚动顶部));} //你好函数isLoaded(img){ 0返回img。获取属性(' src ')===img。获取属性(' data-src ');} //哎哎哎哎哎功能加载img(img){ img。setattribute(' src ',img。获取属性(' data-src ');}/脚本/正文/html你好,你好吗,-你好-你好,拜占庭?拜占庭校验和如何(),我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说,我是说。
哎哎哎哎哎:
//不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不数组。原型。切片。应用(文档。getelement sbytagname(' Li ').foreach((Li)={ let img=Li。获取elementsbytagnname(' img ')[0];//你好你好img-什么切望着切望着切望着切望着切望着//你好你好img-什么阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆阿庆如果(校验和如何(img)!isfied(img)){ load img(img):})-你好-你好,云娥?云娥lazariederimg();
//窗口绑定滚动事件window . addeventlistener(' scroll ',function(){//遍历所有img标记lazyRenderImg();});函数lazyRenderImg(){ array . prototype . slice . apply(document . getelementsbytagname(' Li '))。forEach((Li)={ let img=Li . getelementsbytagname(' img ')[0];//判断当前img是否出现在视野中//判断当前img是否已经加载if(checkShow(img)!isLoaded(img)){ loadImg(img);} })}//第一次进入页面,就在视野中加载了图片lazyRenderImg();三.性能优化
问题:只要window.scroll方法页面滚动,就会触发里面的方法,对性能影响很大
解决方案:当页面停止滚动时,执行页面中的方法,类似于函数throttle
Tips:函数节流:等时间间隔执行函数,这样一个函数不要执行太频繁,一些快速调用要减少到节流。
//窗口绑定滚动事件让定时器;window . addeventlistener(' scroll ',function(){ console . log(' scroll ')//遍历所有img标记if(timer){ clear time out(timer)} timer=settimeout(()={ console . log(' lazyrenderimg .));lazyRenderImg();},300);根据打印的日志发现,lazyRenderImg方法是在滚动停止后执行的,真正减少了对lazyRenderImg不必要的调用。
以上是边肖引入的原生JS,实现图片懒加载的页面性能优化。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!如果你觉得这篇文章对你有帮助,请转载,请注明出处,谢谢!
版权声明:针对图片延迟加载的原生JS页面性能优化是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。