一、什么是图片预加载与懒加载:
图片预加载:顾名思义,图片预加载就是在网页全部加载之前,提前加载图片。当用户需要查看时可直接从本地缓存中渲染,以提供给用户更好的体验,减少等待的时间。否则,如果一个页面的内容过于庞大,没有使用预加载技术的页面就会长时间的展现为一片空白,这样浏览者可能以为图片预览慢而没兴趣浏览,把网页关掉,这时,就需要图片预加载。当然这种做法实际上牺牲了服务器的性能换取了更好的用户体验。
图片懒加载(缓载):延迟加载图片或符合某些条件时才加载某些图片。这样做的好处是减少不必要的访问数据库或延迟访问数据库的次数,因为每次访问数据库都是比较耗时的即只有真正使用该对象的数据时才会创建。懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数。
 
二、图片预加载与懒加载的区别:
两者的行为是相反的,一个是提前加载,一个是迟缓甚至不加载。懒加载对服务器前端有一定的缓解压力作用,预载则会增加服务器前端压力。
 
三、图片预加载与懒加载实现:
1、实现图片预加载:
实现预载的方法非常多,可以用CSS(background)、JS(Image)、HTML(<img />)都可以。常用的是new Image();,设置其src来实现预载,再使用onload方法回调预载完成事件。只要浏览器把图片下载到本地,同样的src就会使用缓存,这是最基本也是最实用的预载方法。当Image下载完图片头后,会得到宽和高,因此可以在预载前得到图片的大小(我所知的方法是用记时器轮循宽高变化)。一般实现预载的工具类,都实现一个Array来存需要预载的URL,然后实现Finish、Error、SizeChange等常用事件,可以由用户选择是顺序预载或假并发预载。Jquery的PreLoad可以用于预载。
 
 图片预加载与图片懒加载(缓载)的区别与实现

最简单的预加载图片功能,也可以预加载js文件等。

但是这种方法首次加载时会加载图片,导致白屏,体验不好,可以加个定时器函数进行优化通过js去加载。

window.onload = function () {

setTimeout(function () {
var head = document.getElementsByTagName('head')[0];
var css = document.createElement('link');
css.type = "text/css";
css.rel = "stylesheet";
css.href = "http://domain.tld/preload.css";

var js = document.createElement("script");
js.type = "text/javascript";
js.src = "http://domain.tld/preload.js";

head.appendChild(css);
head.appendChild(js);

new Image().src = "http://domain.tld/preload.png";

}, 1000);
};
 
 

2、懒加载实现:
第一种是纯粹的延迟加载,使用setTimeOut或setInterval进行加载延迟,如果用户在加载前就离开了页面,那么就不会加载。
第二种是条件加载,符合某些条件,或触发了某些事件才开始异步下载。
第三种是可视区加载,即仅加载用户可以看到的区域,这个主要由监控滚动条来实现,一般会在距用户看到某图片前一定距离遍开始加载,这样能保证用户拉下时正好能看到图片。
Jquery的Lazy Load用于图片缓载
model:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>原生Js图片延迟加载</title>
<style type="text/css">
* {
margin: 0;
padding: 0
}

img.scrollLoading {
border: 1px solid #ccc;
display: block;
margin-top: 10px;
}
</style>
</head>
<body>
<div ).offsetWidth, w = screen.width / ww, h = screen.height / ww, r = Math.round(Math.sqrt(w * w + h * h) / 2.54);
document.write('您的显示器尺寸为:\n' + (screen.width / ww).toFixed(1) + '*' + (screen.height / ww).toFixed(1) + ' cm, ' + r + '寸<br/>');
</script>

相关文章: