懒加载,预加载实现以及对比
2017-09-06 11:00
183 查看
一、懒加载
1.概念:访问页面时,先把img元素的背景图片src替换成一张占位图,这样只需请求一次,当图片出现在浏览器的可视区域内时,再设置图片的真实路径,显示图片。
2.优点:
页面长图片多时,在首次载入时一次性加载会耗费时间长,使用懒加载可以使页面加载速度快、减轻服务器的压力、节约流量。
3.步骤:
页面中的img元素,若没有src属性,浏览器就不会发出请求去下载图片,只有通过Javascript设置了图片路径,浏览器才会发送请求。
1)懒加载先在页面中把需要延迟加载的图片统一使用一张占位图进行占位,把真正的路径存在元素“data-url”属性里。
2)页面加载完成后,通过scrollTop判断图片是否在用户的视野,如果在,则将 data-url的值取出来存放到src中。
3)在滚轮事件中重复判断图片是否进入视中,如果在,则将data-url的值取出来存放到src中。
4.DEMO
<style type="text/css"> img{ display: block; } </style> <body> <img src="" alt=""> <img src="" alt=""> <img src="" alt=""> <img src="" alt=""> <img src="" alt=""> </body> <script type="text/javascript"> var pic=document.getElementsByTagName('img'); arr=['img1.jpg','img2.jpg','img3.jpg','img4.jpg','img5.jpg']; for(var i=0;i<arr.length;i++){ pic[i].setAttribute('src-data', arr[i]); } for(var i=0;i<4;i++){ pic[i].setAttribute('src', pic[i].getAttribute('src-data')); } document.onmousewheel=function(){ if(document.body.clientHeight+document.body.scrollTop>=pic[3].offsetTop+pic[3].offsetHeight){ pic[4].setAttribute('src',pic[4].getAttribute('src-data')); } } </script>
5. 插件
成熟的懒加载插件,直接调用方法即可。
jquery.lazyload.js
二、预加载
1.概念:提前加载图片,当用户需要查看时可直接从本地缓存中渲染。
2.优点:
图片预先加载到浏览器中,这对图片占据很大比例的网站来说十分有利,它保证了图片快速、无缝地发布,也可帮助用户在浏览网站内容时操作得到最快的反映。
3.实现方式
实现预载的方法非常多,比如:用CSS和JavaScript实现预加载;仅使用JavaScript实现预加载;使用Ajax实现预加载。
4.js预加载demo:
常用方法new Image(),设置其src来实现预载,再使用onload方法回调预载完成事件。只要浏览器把图片下载到本地,同样的src就会使用缓存。当Image下载完图片头后,会得到宽和高,因此可以在预载前得到图片的大小。
//要预加载的图片路径 var limg = ["image/bg1.png","image/bg2.png","image/bg3.png","image/bg4.png"]; var ind = 0; for(var j = 0 ; j<limg.length; j++){ var img = new Image(); img.src = limg[j]; img.onload = function(){ ind++; //加载完成 if(ind==limg.length){ //write your code... } } }
三、预加载与懒加载对比
1.概念:懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。
预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染。
2.区别:
两种技术的本质:两者的行为是相反的,一个是提前加载,一个是迟缓加载甚至不加载。懒加载对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力。
本篇完
相关文章推荐
- 加载SDRAM以及ldr,bl实现跳转的区别
- PHP的自动加载类的机制以及实现
- 关于fragment到底是否可见的问题 以及 什么时候调用才能真正意义上实现可见加载
- 用Recyclerview实现列表分组、下拉刷新以及上拉加载--源码
- 游戏编程常用TGA图像格式详解以及加载纹理编程实现
- 用RecyclerView实现新闻列表页,包括头部的图片轮播,两种Item显示方式,下拉刷新和上拉加载以及限制列表的加载条目数
- Android Camera开发系列(上)——Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片
- hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)
- 浅谈前端实现页面加载进度条以及 nprogress.js 的实现
- 用volley实现android加载网络图片(一)以及感受
- 实现app上对csdn的文章列表上拉刷新下拉加载以及加入缓存文章列表的功能 (制作csdn app 四)
- javascript实现加载页面全屏以及禁用鼠标右键和选取功能
- Unity3d-WWW实现图片资源显示以及保存和本地加载
- Android Camera开发系列(上)——Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片
- 如何实现线程的HashMap以及性能对比
- html 中页面的加载顺序以及window.onload 与body 标签里面的onload事件的对比
- 实现app上对csdn的文章列表上拉刷新下拉加载以及加入缓存文章列表的功能 (制作csdn app 四)
- Iwfu-ListView(二) -BaseAdapter分析以及实现同一个ListView加载不同的布局
- 如何实现加载头像,并对图片进行处理,以及显示附近好友
- 遗传算法解决TSP问题实现以及与最小生成树的对比