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 相关文章推荐
原生js 秒表实现代码
Jul 24 Javascript
原生js操作checkbox用document.getElementById实现
Oct 12 Javascript
JS实现的一个简单的Autocomplete自动完成例子
Apr 16 Javascript
jquery datatable后台封装数据示例代码
Aug 07 Javascript
深入理解选择框脚本[推荐]
Dec 13 Javascript
JS实现移动端实时监听输入框变化的实例代码
Apr 12 Javascript
JS实现标签页切换效果
May 04 Javascript
vue滚动轴插件better-scroll使用详解
Oct 17 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
Jun 07 Javascript
如何把vuejs打包出来的文件整合到springboot里
Jul 26 Javascript
Vue 组件参数校验与非props特性的方法
Feb 12 Javascript
javascript面向对象三大特征之封装实例详解
Jul 24 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
短波问题解答
2021/02/28 无线电
作为PHP程序员应该了解MongoDB的五件事
2013/06/03 PHP
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
2个Codeigniter文件批量上传控制器写法例子
2014/07/25 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
Dom 是什么的详细说明
2010/10/25 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
浅谈JavaScript中指针和地址
2015/07/26 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
2016/11/04 Javascript
JSONP跨域请求
2017/03/02 Javascript
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
vue基于mint-ui实现城市选择三级联动
2020/06/30 Javascript
ES6 fetch函数与后台交互实现
2018/11/14 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
[03:54]DOTA2英雄梦之声_第06期_昆卡
2014/06/23 DOTA
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
flask中的wtforms使用方法
2018/07/21 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
2018/10/26 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
python实现字典嵌套列表取值
2019/12/16 Python
python中的yield from语法快速学习
2020/11/06 Python
运动会广播稿80字
2014/01/23 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
校本课程教学计划
2015/01/19 职场文书
英文升职感谢信
2015/01/23 职场文书
检讨书范文1000字
2015/01/28 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
基于go interface{}==nil 的几种坑及原理分析
2021/04/24 Golang
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python
Python+Pillow+Pytesseract实现验证码识别
2022/05/11 Python
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL