js 利用image对象实现图片的预加载提高访问速度


Posted in Javascript onMarch 29, 2013

大量采用高解析度的图像的确可以让一个Web站点容光焕发。但同样也会造成站点访问速度下降——图片是文件,文件就要占用带宽,而带宽直接同访问等待时间相关。现在,让我们来学习一种名为图像预装载(image preloading)的小技巧来提高图像访问速度。

一些浏览器试图通过在本地缓存中保存这些图片来解决此问题。这样一来可以顺序调用这些图片——但对于首次使用这些图片的时候仍然会存在延时。预装载就是一种在需要图片之前就将图片下载到缓存的技术。采用这样的方式可以使当确实需要显示图片时迅速将其从缓存中恢复回来并立即显示。

Image()对象
最简单的图像预装载办法是使用JavaScript新建一个新的Image()对象,然后将希望预装载的图片URL传递给此对象。假设我们拥有一个名为heavyimagefile.jpg的图片文件,我们希望当用户鼠标指针移动到一张已有的图片上时显示此文件。为了能更快的对此文件进行预装载,我们简单的创建了一个名为heavyImage的新Image() 对象,然后将其通过onLoad()事件句柄同步装载到页面上。

<html> 
<head> 
<script language = "JavaScript"> 
function preloader() 
{ 
heavyImage = new Image(); 
heavyImage.src = "heavyimagefile.jpg"; 
} 
</script> 
</head> 
<body onLoad="javascript:preloader()"> 
<a href="#" onMouseOver="javascript:document.img01.src='heavyimagefile.jpg'"> 
<img name="img01" src="justanotherfile.jpg"></a> 
</body> 
</html>

注意,图片的标签(tag)本身并不处理onMouseOver()以及onMouseOut()事件,这也正是上面示例中的<img>标签被包括在<a>标签中的原因。标签<a>则包括了对这些事件类型的支持。

通过数组(arrays)装载多个图片
在实际情况中,你很有可能需要预装载不止一张的图片;比如,对于包括多个图片的菜单条,或者希望实现平滑的动画效果。要实现这些并不困难,只需要利用JavaScript的数组,如下例所示:

<script language="JavaScript"> 
function preloader() 
{ 
// counter 
var i = 0; 
// create object 
imageObj = new Image(); 
// set image list 
images = new Array(); 
images[0]="image1.jpg" 
images[1]="image2.jpg" 
images[2]="image3.jpg" 
images[3]="image4.jpg" 
// start preloading 
for(i=0; i<=3; i++) 
{ 
imageObj.src=images[i]; 
} 
} 
</script>

在上面的例子中,定义了变量i以及名为imageObj的Image()对象。然后定义了新数组images[],每一个数组元素将存储需要预装载图片的地址来源。最后,使用一个for()循环来遍历整个数组,并对每个元素指定Image()对象,以此将图片都预装载到缓存中。
Javascript 相关文章推荐
(仅IE下有效)关于checkbox 三态
May 12 Javascript
jquery 字符串切割函数substring的用法说明
Feb 11 Javascript
javascript字母大小写转换的4个函数详解
May 09 Javascript
JQuery实现表格动态增加行并对新行添加事件
Jul 30 Javascript
jQuery实现当前页面标签高亮显示的方法
Mar 10 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
Aug 26 Javascript
vue基于Vue2.0和高德地图的地图组件实例
Apr 28 Javascript
javascript变量提升和闭包理解
Mar 12 Javascript
原生js代码能实现call和bind吗
Jul 31 Javascript
Openlayers学习之地图比例尺控件
Sep 28 Javascript
在react项目中使用antd的form组件,动态设置input框的值
Oct 24 Javascript
解决vue项目运行npm run serve报错的问题
Oct 26 Javascript
jquery无缝向上滚动实现代码
Mar 29 #Javascript
验证码按回车不变解决方法
Mar 29 #Javascript
Jquery 自定义动画概述及示例
Mar 29 #Javascript
原生js拖拽(第一课 未兼容)拖拽思路
Mar 29 #Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
Mar 29 #Javascript
打印json对象的内容及JSON.stringify函数应用
Mar 29 #Javascript
图片延迟加载的实现代码(模仿懒惰)
Mar 29 #Javascript
You might like
PHP4 与 MySQL 交互使用
2006/10/09 PHP
php无限极分类实现的两种解决方法
2013/04/28 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
深入理解PHP内核(一)
2015/11/10 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
jquery设置控件位置的方法
2013/08/21 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
莱鸟介绍javascript onclick事件
2016/01/06 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
关于 angularJS的一些用法
2017/11/29 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
JavaScript封装单向链表的示例代码
2020/09/17 Javascript
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
[01:09:20]NB vs NAVI Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
Python中获取网页状态码的两个方法
2014/11/03 Python
Python使用PIL库实现验证码图片的方法
2016/03/11 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
新奇的小玩意:IWOOT
2016/07/21 全球购物
台湾森森购物网:U-mall
2017/10/16 全球购物
Unix如何在一行中运行多个命令
2015/05/29 面试题
大学军训感言600字
2014/02/25 职场文书
解除劳动合同协议书范本
2014/09/13 职场文书
个人整改措施书面材料
2014/10/24 职场文书
投资意向协议书
2015/01/29 职场文书
科技馆观后感
2015/06/08 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers
全网非常详细的pytest配置文件
2022/07/15 Python