大家好,我是前端岚枫,一枚二线城市的程序媛,今天主要跟大家分享我整理的前端性能优化的重要方案:图片懒加载,主要包括其原理,我们常用的一些插件,及编写源码实现图片懒加载功能等,图片懒加载是项目比较常见的性能优化方案,也是面试中常遇到的问题。希望下面文章对大家有所帮助。

1. 什么叫懒加载?

懒加载也叫延迟加载或按需加载,比如图片延迟加载或符合某些条件时才加载某些图片。

2. 使用场景:

当我们进入到某个页面的时候,会加载许多图片,有些图片可能在下面,当我们点进页面但没有滚动全部展示时,其实下面的图片是没有作用的,这个时候如果是加载了也相当于白加载,而且还降低了网页的加载速度,那懒加载就是只有滚动到可视区域时才加载当前的图片,也就是说不是一次性加载所有的图片,加快了页面渲染速度,从而在一定程度上减少服务器的请求及宽带,让第一次打开页面的速度变快。

3. 懒加载的优点

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

4. 实现原理

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

5. 实现方案

  1. 把所有需要延迟加载的图片用一个盒子包起来,设置宽高和默认占位图。
  2. 开始让所有的img的src为空,把真实图片的地址放到img的自定义属性上,让img隐藏属性
  3. 等到所有其他资源加载完后,我们再开始加载图片
  4. 对于很多图片,需要当页面滚动的时候,当前图片区域完全显示出来后再加载真实图片

6. 常用懒加载插件

jQuery图片延迟加载插件jQuery.lazyload

插件地址: https://plugins.jquery.com/lazyload/

  1. 使用方法

引用jQuery和jQuery.lazyload.js到页面

<script src="jquery-1.11.0.min.js"></script>
<script src="jquery.lazyload.js?v=1.9.1"></script>
  1. html图片调用方法

图片路径和引用方法用data-original

<img class="lazy" data-original="img/bmw_m1_hood.jpg">
<img class="lazy" data-original="img/bmw_m1_side.jpg">
  1. js调用
  $(function() {$("img.lazy").lazyload({effect: "fadeIn"});});

vue图片懒加载–vue-lazyload的使用

  1. 安装
npm install vue-lazyload --save-dev
  1. vue 项目中引入

main.js全局引入


import Vue from 'vue'
import App from './App.vue'
import VueLazyload from 'vue-lazyload'Vue.use(VueLazyload)// 或添加配置参数
Vue.use(VueLazyload, {preLoad: 1.3,error: 'dist/error.png',loading: 'dist/loading.gif',attempt:2
})

7.编写代码实现图片懒加载

  1. 以上是图片展示图片懒加载过程原理:

  1. 简易功能实现核心代码
//html 代码
<!DOCTYPE html><head><meta charset="UTF-8"><title>图片懒加载</title><style>* {margin: 0;padding: 0;}.imgBox {margin: 330px auto;width: 800px;height: 300px;overflow: hidden;background: gray;}.imgBox img {display: none;width: 100%;}</style>
</head><body><div id="container"><div class="imgBox"><img src=""data-img="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7eb2d4d58f344ada9cb4651e8eefe0f2~tplv-k3u1fbpfcp-zoom-crop-mark:1304:1304:1304:734.awebp"alt="" /></div></div><script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script><script src="lazyload.js"></script>
</body></html>//lazyload.js代码(function($){var $imgBox = $('.imgBox');var $imgs = $imgBox.find('img');var $window = $(window);$window.on('scroll', function(){if($imgs.isLoad){//之前加载过则不会重新加载return ;}var $A = $imgBox.offset().top + $imgBox.outerHeight()var $B = $window.scrollTop()+ $window.outerHeight()if($A <= $B){$imgs.attr('src',$imgs.data('img'))$imgs.on('load',function(){$imgs.stop().fadeIn();})$imgs.attr('isLoad', true)}})})(jQuery)
  1. 稍微复杂功能实现代码
// html代码
<!DOCTYPE html>
<head><meta charset="UTF-8"><title></title><style>*{margin: 0;padding: 0;}#container{width: 800px;margin: 0 auto;}.imgBox{margin-bottom:20px;height: 300px;overflow: hidden;background: gray;}.imgBox img{display: none;width: 100%;}</style>
</head>
<body><div id="container"><!-- <div class="imgBox"><img src="" data-img="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7eb2d4d58f344ada9cb4651e8eefe0f2~tplv-k3u1fbpfcp-zoom-crop-mark:1304:1304:1304:734.awebp" alt="" /></div> --></div><script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script><script src="lazyload2.js"></script>
</body>
</html>//lazyload2.j(function($){var $container = $('#container');var $window = $(window);var str = ''// 模拟数据for(var i=0; i<=19; i++){str += '<div class="imgBox">'+'<img src=" " data-img="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7eb2d4d58f344ada9cb4651e8eefe0f2~tplv-k3u1fbpfcp-zoom-crop-mark:1304:1304:1304:734.awebp" alt="" />'+'</div>'}$container.html(str)var $imgBox = $container.find('.imgBox');//多张图片加载$window.on('scroll', function(){//获取浏览器底边框距离body的距离var $B = $window.scrollTop()+ $window.outerHeight();//循环每个图片区域,根据自己区域距离body的距离,计算出里面的图片是否加载$imgBox.each(function(index, item){var item = $(item);var $A = item.offset().top + item.outerHeight();var $imgs = item.find('img');if($imgs.isLoad){//之前加载过则不会重新加载return ;}if($A<= $B){$imgs.attr('src',$imgs.data('img'))$imgs.on('load',function(){$imgs.stop().fadeIn();})$imgs.attr('isLoad', true)}})})})(jQuery)

关注公众号:程序员石磊 回复:002 即可获取源码

前端性能优化的重要方案:图片懒加载相关推荐

  1. 微信小程序优化:如何实现图片懒加载?

    前言 当我们在使用微信小程序浏览图片时,不可避免地会遇到加载缓慢的情况.这不仅会影响用户体验,还会耗费用户的流量.那么,有没有一种方法可以让图片在用户需要时再进行加载,从而提升用户体验和减少流量消耗呢 ...

  2. vue2首屏性能优化(splitChunks/externals/gzip/路由懒加载)

    首屏加载慢原因: Vue只有第一次会加载页面, 以后的每次页面切换,只需要进行组件替换.因为Vue 是SPA,所以首页第一次加载时会把所有的组件以及组件相关的资源全都加载了,造成网站首页打开速度变慢的 ...

  3. Web前端性能优化——如何有效提升静态文件的加载速度

    原文链接:https://wetest.qq.com/lab/view/345.html?from=content_qcloud WeTest 导读 此文总结了笔者在Web静态资源方面的一些优化经验. ...

  4. vue 图片拖动加载 类似于地图_前端性能优化之图片懒加载(附vue自定义指令)...

    作者:lzg9527 链接:https://juejin.cn/post/6903774214780616718 在类电商类项目,往往存在大量的图片,如 banner 广告图,菜单导航图,美团等商家列 ...

  5. 前端图片渲染性能优化与实践 — 图片懒加载

    前言 对于图片量比较大的点上首页APP等,在打开商品展示页面的时候需要再加大量图片,在这种场景下如果直接全量加载,必然会造成页面性能消耗过大,白屏或者卡顿,用户体验非常糟糕,用户真的需要我们显示所有图 ...

  6. 性能优化之图片懒加载

    本文在github做了收录 github.com/Michael-lzg- demo源码地址 github.com/Michael-lzg- 为什么要进行图片懒加载 我们先来看一下页面启动时加载的图片 ...

  7. 聊一聊前端图片懒加载背后的故事

    本文内容 什么是懒加载 如何实现懒加载 监听滚动事件 IntersectionObserver 浏览器原生方案 本文小结 相信大家已经注意到我博客有了一点变化,因为博主最近利用空闲时间对博客进行了优化 ...

  8. 小程序之图片懒加载[完美方案,你不来看看?]

    效果图 既然来了,把妹子都给你. 定义 懒加载,前端人都知道的一种性能优化方式,简单的来说,只有当图片出现在浏览器的可视区域内时,才设置图片正真的路径,让图片显示出来.这就是图片懒加载. 实现原理 监 ...

  9. 前端手写(二十二)——手写图片懒加载

    一.写在前面 图片懒加载是我们在开发中,需要进行处理的问题,也是前端性能优化的一个重要的因素. 二.手写懒加载 <script>function lazyload() {const img ...

最新文章

  1. ocr数据集批量换随机背景
  2. 怎样解决WampServer #1405 - Access denied for user #39;root#39;@#39;localhost#39; (using password: NO...
  3. Beta 冲刺 (3/7)
  4. 资源收集流程为SDN控制器
  5. vue 是否有word编辑控件_GitHub - C84882428/editor-ui: vue集成 tinymce 富文本编辑器,增加导入 word 模板...
  6. Docker入门与实践之 Dockerfile 语法详解
  7. 区块链开发_比特币开发1
  8. 联想i微型计算机怎么拆,联想t410i如何拆机?联想t410i拆机方法【图文】
  9. excel取末尾数字_excel表格中数字末尾的0不显示怎么设置
  10. iptables: No config file解决方法
  11. 论文笔记:PPT: Pre-trained Prompt Tuning for Few-shot Learning
  12. 京东大数据技术白皮书(附下载)
  13. 标签条码打印软件如何创建连续数据变量
  14. 在线生成favorite ico的网站
  15. Qt TableView的简单使用
  16. 记录一次net.ipv4.tcp_tw_recycl快速回收机制导致的tcp连接失败问题
  17. PMP备考错题集-模拟三
  18. 北京图王软件开发有限公司产品介绍-Visual Graph专业图形引擎
  19. 鲁大师性能测试要装什么软件吗,鲁大师怎么给电脑跑分?赶快看看你的电脑性能如何吧!...
  20. 电子价签在零售行业国内外的发展历程

热门文章

  1. vlookup 2张表 显示na_【Excel 函数】Vlookup 正反向查询
  2. abaqus失效单元删除_abaqus单元删除的一般方法
  3. mac+php版本切换+cli,Mac环境下php版本切换
  4. java oop入门_java入门(十六) | OOP(三)之构造方法
  5. c# 插入数据到 uniqueidentifier_每天5分钟用C#学习数据结构(16)二叉树 Part 2
  6. 命名实体识别之基本概念
  7. AJAX的 contentType
  8. 周计划1[7.22~7.28]
  9. 二、源代码=程序集及程序集概念介绍
  10. android:descendantFocusability用法