是什么?

  浏览器会缓存静态资源(hmtl/css/img等)。图片预加载就是让浏览器提前缓存图片,提升用户体验。

浏览器什么情况下会下载图片?

  1,解析到html中img的src属性的时候

  2,解析到background-image属性的url()的时候

  3,在js中创建Image对象的之后给他的src属性赋上一个url之后浏览器就会发出请求。html中的img标签本质就是Image对象。html中每出现一个img标签,就有一个Image对象被创建。

 // html
<img src="https://www.xxx.com/static/img/xxx.png" alt="">
// css
background:url('./src/static/images/goods1.png')
// js 在js中创建Image对象后给它赋上src属性的时候浏览器也会下载src指向的资源。
new Image().src = "https://www.xxx.com/static/img/xxx.png"

在哪里个阶段使用预加载?

  反思:浏览器拿到一个HTML的时候第一件事情就是创建document对象然后解析HTML标签生成DOM树,当他解析到img标签的src属性的时候会立即向src指向的地址发出请求。这就代表我们定义在一个页面当中的img在页面初始的时候原本就会被统统下载。那我们为什么还要去自己下载这些图片?

  结论:在index.html下载其他页面中需要用到的图片。

什么场景需要使用预加载?

  像xx公司官方网站,这种展示类的页面中一般会有用于展示实力的比较大的轮播图和背景图。把这些图片提前下载下来,就能避免页面打开半天都是白茫茫的一片。

实现方式

  实现预加载要做的只有一件事情,那就是在用到图片之前让浏览器提前缓存图片。

  通过html:在index页面末尾定义多个img标签,达到提前下载的目的。

 // 批量定义要下载的图片资源,定义display 阻止他们渲染到页面
<img src="xxx.xxx.xxx/static/img/xx1.xxx" style="display: none">
<img src="xxx.xxx.xxx/static/img/xx2.xxx" style="display: none">
<img src="xxx.xxx.xxx/static/img/xx3.xxx" style="display: none">

  通过css:在css文件中通过background-image属性批量下载图片

<div id="preload" style="display:none"></div>
#preload{
  // url中的图片会依次次请求过来。
background:url('./src/static/images/goods1.png');
background:url('./src/static/images/goods2.png');
background:url('./src/static/images/goods3.png');
}

  通过js:批量创建Image对象,为它们的src属性赋上我们需要下载的图片URL

// 需要下载的URL列表
var imgList = ['./src/static/images/goods1.png'];
loadImg(imgList);
function loadImg(imgList){
  imgList.map(function(imgSrc,index){
  var img = new Image();
  // 记录自己是第几个下载的图片
  img.num = index+1;
  console.log(img.num);
  // 绑定加载完成事件处理函数
  img.addEventListener("load",loadHandler);
  // 这里为img指定src之后浏览器就会发出请求
  img.src = imgSrc;
  })
}
function loadHandler(e){
  /*这里可以通过this拿到加载好的图片对象,可以对它为所欲为。*/
  // 注销事件,释放内存。
  this.removeEventListener("load",loadHandler);
  // 判断是不是最后一个要加载的图片
  if(this.num === imgList.length)console.log("加载完成!");
}

小结:

  图片预加载的本质:让浏览器提前缓存之后要用到的图片。

  好处:增强用户体验。

  坏处:不管用不用的上都会吃用户流量,密集的下载会对服务器造成一定压力。

web前端图片预加载的更多相关文章

  1. Javascript图片预加载详解

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

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

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

  3. 图片预加载和AJAX的图片预加载

    利用js实现图片预加载,加载所需要图片的路径与名称即可,很容易实现,该方法尤其适用预加载大量的图片: <div class="hidden"> <script t ...

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

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

  5. JQ封装图片预加载插件

    我们知道,图片的加载,特别是资源较大的图片,加载相当耗费时间.为了提高用户体验,不得不使用图片预加载技术来提前加载,以提高用户在浏览时的流畅度. 先来弄明白图片的懒加载和预加载的不同: 1)概念:懒加 ...

  6. js图片预加载与延迟加载

    图片预加载的机制原理:就是提前加载出图片来,给前端的服务器有一定的压力. 图片延迟加载的原理:为了缓解前端服务器的压力,延缓加载图片,符合条件的时候再加载图片,当然不符合的条件就不加载图片.​ 预加载 ...

  7. Javascript图片预加载详解 分类: JavaScript HTML+CSS 2015-05-29 11:01 768人阅读 评论(0) 收藏

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

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

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

  9. 再谈javascript图片预加载技术

    图片预加载技术的典型应用: 如lightbox方式展现照片,无疑需要提前获得大图的尺寸,这样才能居中定位,由于javascript无法获取img文件头数据,必须等待其加载完毕后才能获取真实的大小然后展 ...

随机推荐

  1. spinlock,mutex,semaphore,critical section的作用与差别

    某年深信服的笔试题,考的就是多线程的同步.简单的解释下方便记忆: 1.spinlock:自旋锁.是专为防止多处理器并发而引入的一种锁. 2.mutex:相互排斥量. 仅仅有拥有相互排斥对象的线程才有訪 ...

  2. Java集合框架:Arrays工具类

    java.util.Arrays类能方便地操作数组,它提供的方法都是静态的.整个Arrays工具类的实现有3000+行.可是归纳总结一下可知它有下面功能(9个): 1. asList 定义: @Saf ...

  3. TinyXML:属性

    TiXmlAttribute: 代表XML中的属性,TiXmlAttribute中定义了一系列对属性的操作 TiXmlAttribute的友元类: friend class TiXmlAttribut ...

  4. 【Java架构学习】Model1和Model2讨论

    在Java的学习中.这两个词的频率出现的非常高.那就是Model1和Model2.那么到底什么是Model1,什么是Model2呢?我们是不是又非常自然接受这两个概念.可是不知道其所以然呢?今天我们就 ...

  5. 2016/06/16 phpexcel

      程序部分   require_once './phpexcel/PHPExcel.php';   // 首先创建一个新的对象  PHPExcel object $objPHPExcel = new ...

  6. java序员必备的十大技能

    想成为一名出色的Java程序员么?本文将为大家重点介绍程序员必备的十大技能,成就您的梦想.       1.语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样 ...

  7. debian var目录

    1 /usr和/var /usr,只读数据. /var,可变数据. 2 /var/lib和/var/cache /var/lib,保存应用或者系统可变的状态信息,真的只是状态信息,比如/var/lib ...

  8. proc_create的使用方法

    proc_create的使用方法 proc文件系统是个有用的东东.创建一个proc虚拟文件,应用层通过读写该文件,即可实现与内核的交互.proc虚拟文件是如何创建的呢? 先看看比较简单的,创建proc ...

  9. POJ1797 Heavy Transportation —— 最短路变形

    题目链接:http://poj.org/problem?id=1797 Heavy Transportation Time Limit: 3000MS   Memory Limit: 30000K T ...

  10. chrome——关于chrome浏览器的奇葩问题

    前言 说下自己遇到的关于chrome的奇葩问题~ 问题 目前就一个,还是刚才才遇到的~ 消息通知 客户的chrome浏览器死活没有通知,检查后发现通知权限未开启, 通知权限开启后,还是没有提示,最后排 ...