/**

* 预加载

* @param {Array} dataList 预加载数据

* @param {Array} attrArray 预加载属性,可选

*/

export function preLoad(dataList,attrList){

//若有指定对象属性

let imgList = [];

if(attrList){

dataList.forEach(element => {

attrList.forEach(attr=>{

if(element[attr]){

const img = new Image();

img.src = element[attr];

imgList.push(img);

}

})

});

}else{

dataList.forEach(element => {

const img = new Image();

img.src = element;

imgList.push(img);

});

}

return imgList;

}

测试浏览器:chrome、firefox

在Firefox下并没有from memory cache以及from disk cache的状态展现 相同的资源在chrome下是from

disk/memory cache,但是Firefox统统是304状态码

即Firefox下会缓存资源,但是每次都会请求服务器对比当前缓存是否更改,chrome不请求服务器,直接拿过来用

200 OK (from disk cache) 是浏览器没有跟服务器确认, 就是它直接用浏览器缓存。 304

是浏览器和服务器确认了一次缓存有效性,再用的缓存。客户端和服务器端只需要传输很少的数据量来做文件的校验,如果文件没有修改过,则不需要返回全量的数据。能够节省大量的网络带宽,并减少了页面的渲染时间。

图片img的预加载

方法一:直接用src进行预加载,但不保存

mounted() {

preLoad(this.data,['imagePath']);

}

结果:

谷歌 切换图片速度快,确实有预加载. 初次 200 disk cache

切换没有发XHR,发了Img。200 OK (from disk cache) 是浏览器没有跟服务器确认,即直接用浏览器缓 存。

火狐切换图片速度慢,并没有预加载 初次,没有“已缓存”标识。第二个框框内是要预加载的图

第一次切换,还是发了请求

第二次切换,正常没有请求(默认情况下状态码为200的响应可以被缓存)。

所以火狐预加载并没有成功。

方法二: 把预加载的挂载到data上(最好)

结果:火狐、谷歌表现一致,都切换较快,没有发请求

mounted() {

this.preLoadImg = preLoad(this.data,['bgimagePath']);

}

methods: {

changeActive(index) {

this.current = index;

let dom = this.$refs['solution-img'];

if(dom.childNodes.length > 0) dom.removeChild(dom.childNodes[0]);

dom.appendChild(this.preLoadImg[index]);

}

},

背景图片的预加载

不做任何处理结果:第一次请求返回200。第一次加载后都是304

方法一 :使用css预加载

#preload-01 { background: url('~@/assets/img/market/icon-00.png') no-repeat -9999px -9999px; }

#preload-02 { background: url('~@/assets/img/market/icon-01.png') no-repeat -9999px -9999px; }

结果:和不处理表现一致。初次加载也没有请求这些图片。

方法二:src预加载,但不保存

{

background-image: url('~@/assets/img/market/icon-10.png') ;

&:hover{ background-image:url('~@/assets/img/market/icon-11.png')}

}

myPreLoad(){

let images = [

require('@/assets/img/market/icon-10.png'),

require('@/assets/img/market/icon-11.png'),

];

preLoad(images);

}

结果:第一次hover 状态码304。之后切换没有发请求。火狐和谷歌表现一致,都是304

方法三:把预加载的挂载到data上

handleMouseenter(index){

this.getDom(index).style.backgroundImage = "url(" +this.preLoadImage[index*2+1].src + ")";

},

结果:谷歌切换没有发请求。但是火狐会发请求,并返回304。

方法四:雪碧图(最好)

.backgroud-box{

width: 137px ;

height: 113px;

background-image: url('./icon-1.png') ;

background-position-x:100%;

background-position-y:0;

}

&:hover>.backgroud-box { background-position-y:-113px;}

以上方法都会出现切换背景图片闪烁。用这个方法位移背景就不会。而且第一次加载就把图片下载下来了,切换也不会发请求,因为用的是同一张图

个人结论

1、因为

在Firefox下并没有from memory cache以及from disk cache的状态展现。 相同的资源在chrome下是from

disk/memory cache,但是Firefox统统是304状态码

所以火狐下每次操作到src或者url都要发出请求。

2、刚好标签是一个Image对象,可以直接插入html,所以可以保存在data上缓存。304请求虽然也是可以缩短渲染时间,但是直接保存在data上可以免去一次请求,响应时间更快。

3、背景图片涉及到改变url,所以没办法直接用保存在data上的数据。

css完成图片预加载,图片预加载相关推荐

  1. 利用CSS、JavaScript及Ajax实现图片预加载的三大方法

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

  2. 利用CSS、JavaScript及Ajax实现图片预加载的三大方法及优缺点分析

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

  3. CSS、JavaScript和Ajax实现图片预加载的三大方法及优缺点分析

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画 廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发 ...

  4. 用javascript预加载图片、css、js的方法研究

    预加载的好处可以让网页更快的呈现给用户,缺点就是可能会增加无用的请求(但图片.css.js这些静态文件可以被缓存),如果用户访问的页面里面的css.js.图片被预加载了,用户打开页面的速度会快很多,提 ...

  5. javascript预加载图片、css、js的方法研究

    预加载的好处可以让网页更快的呈现给用户,缺点就是可能会增加无用的请求(但图片.css.js这些静态文件可以被缓存),如果用户访问的页面里面的css.js.图片被预加载了,用户打开页面的速度会快很多,提 ...

  6. css 加载图片,纯CSS图片预加载

    译自:[Creating a CSS Image Preloader](http://www.devirtuoso.com/2009/07/creating-a-css-image-preloader ...

  7. 原生CSS设置预加载图片之前的默认背景图

    /*默认加载图片*/ .class-name { /*背景图片*/background: url(../../img/banner/banner-default.jpg) no-repeat cent ...

  8. javascript图片懒加载与预加载的分析

    懒加载与预加载的基本概念. 懒加载也叫延迟加载:前一篇文章有介绍:JS图片延迟加载 延迟加载图片或符合某些条件时才加载某些图片. 预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染. 两种技 ...

  9. 基于jQuery的图片异步加载和预加载实例

    如今的网页中有很多图片,比如相册列表,那么如果一次性读取图片将会瞬间加重服务器的负担,所以我们用jQuery来实现图片的异步加载和预加载功能,这样在页面的可视范围内才会加载图片,当拖动页面至可视界面时 ...

  10. 修改Thickbox,预加载图片和点击图片前后浏览

    2011了,大家新年好! 外面寒冷,躲在家里写写博客还是挺好的. 今天为我的博客修改了下jQuery的Thickbox,增加了预加载图片功能和点击图片前后浏览的功能. 首先看下效果: http://w ...

最新文章

  1. MFC调用CFileDialog之后目录居然会改变,调试了好久终于发现是这个问题
  2. 使用Xpose突破安卓App禁止截屏限制
  3. 未来一瞥:机器人码农
  4. linux rm 不释放_linux删除文件空间不释放问题解决
  5. win7 VS2008 编译luabind-0.9.1 动态库 静态库
  6. 大剑无锋之如何查看一个java进程的堆内存使用情况(jps,jstack,jmap)【面试推荐】
  7. 全字库说文解字字体_【180期】可商用字体大全,无版权纠纷!
  8. python中property函数_Python中的property()函数
  9. python 序列化之JSON和pickle详解
  10. Oracle的imp、exp导入导出命令
  11. 基于交比不变性的太阳定位算法的研究
  12. Python之科赫曲线绘制
  13. NOIP2012 提高组 Day 2
  14. marvin java_使用Java中的Marvin框架去除轮廓
  15. 苹果Mac字体设计编辑工具:Glyphs
  16. 绝了,SpringBoot引入 Dataway,无需开发任何代码配置一个满足需求的接口!
  17. Linux Python离线下载模块
  18. Python基础学习:类语法规则
  19. 怎么画因果图?因果图绘图步骤详解
  20. 天龙八部搭建mysql教程_天龙八部私服架设mysql数据库安装

热门文章

  1. pr cpu100%_PR插件Beauty Box安装教程
  2. easyui java下拉列表项目_EasyUI/TopJUI之如何动态改变下拉列表框ComboBox输入框的背景颜色...
  3. matlab课后答案杨德平,MATLAB基础教程习题答案作者杨德平例题源程序课件.pdf
  4. 你想要的宏基因组-微生物组知识全在这(2022.5)
  5. 本地安装AD插件教程,Altium AD插件安装 DXP插件安装 本地安装 导CAD DWG DXF
  6. VMP 虚拟机(加壳原理)
  7. 【国际篇】有关学术的一些小知识(EI、SCI、影响因子、中科院分区、JCR分区等)
  8. python黑帽子怎么样_PYTHON 黑帽子第二章总结
  9. iphone怎么录屏 苹果屏幕录制怎么操作
  10. Pandas速查手册中文版