前端性能优化--图片懒加载(lazyload image)

时间:2022-10-28 08:22:01

话说前头:

上次写了一篇webpack的学习心得,webpack能做到提升前端的性能,其模块打包最终生成一个或少量的文件能够减少对服务端的请求。除此之外,本次的图片懒加载(当然不仅限于图片,还可以有视频,flash等)也是一种优化前端性能的方式。使用懒加载可以想要看图片时才加载图片,而不是一次性加载所有的图片,从而在一定程度从减少服务端的请求。

懒加载介绍:

  • 通俗介绍:懒加载怎么个懒法,就是你不想看就不给你看,我也懒得加载出来,懒得去请求。通俗的说就是你不要就不给你,怎么地。举个栗子,比如在进入某个页面的时候,它会有许多的图片,有些图片可能在下面,当我们点进页面但没有滑动下去或没看完整个页面,那么下面的图片就会"没用",加载了也白加载,而且还降低了网页的加载速度。因此用懒加载能当滚动到可视区域时才加载当前的图片。

  • 原理:图片的加载是由src的值引起,当对src赋值时浏览器就会请求图片资源,基于这个,可以利用html5属性data-XXX来保存图片的路径,当我们需要加载图片的时候才将data-xxx的值赋予src,酱就能实现图片的按需加载,也就是懒加载了。

  • 优点:提高前端性能,图片在需要的时候才加载,减轻服务的负担,提高页面的加载速度,能够减少带宽。

懒加载实现方式:

1.使用jquery-lazyload.js,jQuery的插件用于懒加载使用,需要依赖jQuery。

jquery-lazyload.js演示

2.使用echo.js:专门用于实现懒加载。

echo.js演示

-- jquery-lazyload.js 实现方式:

1.引入:在HTML中引入jQuery和jQuery-lazyload,如:

<script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="js/jquery.lazyload.min.js"></script>

2.图片中不使用src属性,因为使用src属性后就会默认发送请求请求图片,使用data-original代替如:

<img class="lazy" data-original="images/p1.jpg" style="margin-top:500px" height="300">

3.添加jQuery代码:

<script type="text/javascript">
$(function() {
$("img.lazy").lazyload();
})
</script>

-- jquery-lazyload.js的参数:

1.threshold :设置Threshold参数来实现滚到距离其xx px时就加载。如:

$(function() {
$("img.lazy").lazyload({
threshold :100
});
})

2.placeholder :为某一图片路径.此图片用来占据将要加载的图片的位置,待图片加载时,占位图则会隐藏,比如放一些等待加载的图片来优化用户体验效果。

$(function() {
$("img.lazy").lazyload({
placeholder: "images/loading.gif"
});
})

3.event :触发定义的事件时,图片才开始加载(此处click代表点击图片才开始加载,还有mouseover,sporty,foobar(…))

$(function(){
$("img.lazy").lazyload({
event : "click"
});
})

4.effects :图片显示时的效果,默认是show。

$(function(){
$("img.lazy").lazyload({
effects:"fadeIn"
});
})

5.container :值为某容器.lazyload默认在拉动浏览器滚动条时生效,这个参数可以让你在拉动某DIV的滚动条时依次加载其中的图片

 $(function(){
$("img.lazy").lazyload({
container: $("#container")
});
})

6.failure_limit :一般用于当页面中图片不连续时使用,滚动页面的时候, Lazy Load 会循环为加载的图片. 在循环中检测图片是否在可视区域内,插件默认情况下在找到第一张不在可见区域的图片时停止循环。如:

 $(function(){
$("img.lazy").lazyload({
failure_limit : 20
});
})

这里设为20表示插件找到 20 个不在可见区域的图片时才停止搜索。

7.skip_invisible :为了提升性能,插件默认忽略隐藏的图片;如果想要加载隐藏图片.设置skip_invisible为false;

  $(function(){
$("img.lazy").lazyload({
skip_invisible : false
});
})

-- echojs实现方式:

  • 引入:在HTML中引入echo.min.js,如:
<script type="text/javascript" src="js/echo.min.js"></script>
  • 图片中的src使用data-echo代替如:
<img class="lazy" data-echo="images/p1.jpg" style="margin-top:500px" height="300">
  • 添加js代码:
echo.init({
//离可视区域多少像素的图片可以被加载
offset: 500,
//图片延时多少毫秒加载
 throttle: 1000
});

-- echo只有两个可选参数:

  • offset:离可视区域多少像素的图片可以被加载
  • throttle:图片延时多少毫秒加载

最后说几句:

  • 上述的懒加载实现方式都是人家实现好的,毕竟人家已经做好就不去重复造*,直接用人家会比较放心,因为大家都在用。
  • jquery-lazyload插件的功能比较多,echojs虽然功能少但也够用,而且体积小,所以根据需求对两者取舍。
  • 别人做好但也要去了解人家的如何去做,原理有了,我自己也尝试去做,写得还不是很好。这两个方式对于一些页面图片懒加载已经够用,但是对于轮播图的加载还是不够理想。
  • 遇到的一些问题:

    1.在滚动轮播图片中,首次不能加载还没有滚出来的图片。

    2.想实现点击下一张轮播图才去加载那张图片。

    以上所说的这些还需要继续研究研究,正在寻求一些好的方法。

前端性能优化--图片懒加载(lazyload image)的更多相关文章

  1. 前端如何实现图片懒加载&lpar;lazyload&rpar; 提高用户体验

    定义 图片懒加载又称图片延时加载.惰性加载,即在用户需要使用图片的时候加载,这样可以减少请求,节省带宽,提高页面加载速度,相对的,也能减少服务器压力. 惰性加载是程序人性化的一种体现,提高用户体验,防 ...

  2. &lbrack;js开源组件开发&rsqb;图片懒加载lazyload

    图片懒加载lazyload 前端对请求的一种优化方式,为什么叫懒加载,无从查起,反正我当初一直认为它是滚动加载的一种类型.它主要是以图片或背景在可视区域内时才显示真正的图片,减少src带来的负荷.所以 ...

  3. js插件---图片懒加载lazyload

    js插件---图片懒加载lazyload 一.总结 一句话总结:使用异常简单,src里面放加载的图片,data-original里面放原图片,不懂的位置去官网或者github找API就好. 1.laz ...

  4. 前端性能优化成神之路--图片懒加载&lpar;lazyload image&rpar;

    图片懒加载(当然不仅限于图片,还可以有视频,flash)也是一种优化前端性能的方式.使用懒加载可以想要看图片时才加载图片,而不是一次性加载所有的图片,从而在一定程度从减少服务端的请求 什么是懒加载 懒 ...

  5. 前端实现图片懒加载&lpar;lazyload&rpar;的两种方式

    在实际的项目开发中,我们通常会遇见这样的场景:一个页面有很多图片,而首屏出现的图片大概就一两张,那么我们还要一次性把所有图片都加载出来吗?显然这是愚蠢的,不仅影响页面渲染速度,还浪费带宽.这也就是们通 ...

  6. jQuery插件图片懒加载lazyload

    来自XXX的前言: 什么是ImageLazyLoad技术 在页面上图片比较多的时候,打开一张页面必然引起与服务器大数据量的 交互.尤其是对于高清晰的图片,占的几M的空间.ImageLazyLoad技术 ...

  7. 图片懒加载lazyload&period;js详解

    简介 lazyload.js用于长页面图片的延迟加载,视口外的图片会在窗口滚动到它的位置时再进行加载,这是与预加载相反的. 优点 它可以提高页面加载速度: 在某些情况清晰它也可以帮助减少服务器负载. ...

  8. 图片懒加载--lazyload&period;js的用法

    这几天公司的项目已经完成的差不多了,只剩下各种优化问题.今天着重于图片加载的优化.当一个页面需要下拉很长而且又有过多的图片要加载时,就会发生很多http请求,就会拉慢网页加载速度,用户体验不友好.怎么 ...

  9. 插件:&starf;&starf;&starf; &excl;&excl;&excl;图片懒加载 lazyload&period;js 、 jquery&period;scrollLoading&period;js

    插件:图片懒加载 jquery.lazyload.js 2016-3-31 插件说明:http://www.w3cways.com/1765.html (小插件,好用) 下载地址: https://r ...

随机推荐

  1. golang开发环境&lpar;2016&period;9&period;16&rpar;

    一.windows下安装 1.下载go1.7.3.windows-amd64.msi,建议默认安装到‘C:\Go\’ 2.环境变量 变量 值 说明 Path C:\Go\bin 安装程序默认会设置,如 ...

  2. codevs1230 元素查找

    1230 元素查找  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 给出n个正整数,然后有m个询问,每 ...

  3. TableView--通讯录--开篇

    一,需求图:

  4. python爬虫——建立IP池,将可用IP存放到redis

    直接上代码,每行代码后面都有注释 import urllib.request import urllib import re import time import random import sock ...

  5. 【Python】Python-基础语法学习

    基础语法学习 果然学完 C++ 后再看其他语言的确有很多的共性,只需要熟悉一下python的独特语法和 C++ 中的差异就可以写出一些小的程序,而写得过程中也再次体会出python代码的精简和灵活: ...

  6. MongoDB 教程(三):MongoDB 的下载、安装和配置

    一.下载 下载地址:https://www.mongodb.com/download-center#community(这里是Windows 版,其他版本也可以在该网页进行下载) 版本选择: Mong ...

  7. BZOJ5092&colon;&lbrack;Lydsy1711月赛&rsqb;分割序列&lpar;贪心&comma;高维前缀和&rpar;

    Description 对于一个长度为n的非负整数序列b_1,b_2,...,b_n,定义这个序列的能量为:f(b)=max{i=0,1,...,n}((b_1 xor b_2 xor...xor b ...

  8. 【视频教学】如何利用高德地图IOS SDK进行开发?

    Step1:使用IOS SDK可以做什么高德地图 iOS SDK 是一套基于 iOS 5.1.1 及以上版本的地图应用程序开发接口.通过该接口,用户可使用高德地图数据和服务轻松构建功能丰富.交互性强的 ...

  9. Lotus Domino开发心得&lpar;一&rpar;

    —- Lotus Domino 是当今办公自动化系统的主流开发平台之一,目前大部分企业和机构都在使用Lotus Domino 开发自己的无纸办公系统.在开发过程中,我积累了一些小技巧,现在公布出来,希 ...

  10. rem布局注意问题和meta标签

    使用rem前的准备: 如果是移动端,添加name="viewport"的meta标签,其中的属性数值根据实际需求而定: <meta name="viewport&q ...