图片懒加载

什么是懒加载?

懒加载也叫做延迟加载或者按需加载 。在长网页中延迟加载暂时未看到的图片数据,能够优化网页性能,提高用户体验 。在较长的网页或应用中,如果图片很多,等待全部图片都被加载出来需要花费较长时间,就会降低用户体验也会导致功能使用受到阻碍,与此同时,用户只能看到可视窗口的那一部分图片数据,还浪费了性能。使用图片的懒加载就可以解决以上问题。

懒加载的优点

  • 减少无用资源加载:使用懒加载能够减少服务器的压力和流量并且也减小了浏览器的负担。
  • 提升用户体验:同时加载较多图片,可能需要等待的时间较长,这样影响了用户体验,使用懒加载就能减少等待时间从而提高用户体验。
  • 防止加载过多图片而影响其他资源文件的加载 :会让网站功能的正常使用受到影响。

懒加载的原理:

因为图片是通过 src 属性进行的加载,所以在对应图片未出现在可视界面的时候,不将图片对应的地址赋值给 src 属性,而是将地址存储在自定义属性 data-xxx 中,当进行滚动后图片出现在可视界面时,通过获取对应图片的自定义属性 data-xxx 的值再赋值给 src 属性进行图片的加载和显示。

懒加载的三种实现方式:

html代码:

  <p>噫吁嚱,危乎高哉!蜀道之难,难于上青天!蚕丛及鱼凫,开国何茫然!尔来四万八千岁,不与秦塞通人烟。西当太白有鸟道,可以横绝峨眉巅。地崩山摧壮士死,然后天梯石栈相钩连。上有六龙回日之高标,下有冲波逆折之回川。黄鹤之飞尚不得过,猿猱欲度愁攀援。青泥何盘盘,百步九折萦岩峦。扪参历井仰胁息,以手抚膺坐长叹。问君西游何时还?畏途巉岩不可攀。但见悲鸟号古木,雄飞雌从绕林间。又闻子规啼夜月,愁空山。蜀道之难,难于上青天,使人听此凋朱颜!连峰去天不盈尺,枯松倒挂倚绝壁。飞湍瀑流争喧豗,砯崖转石万壑雷。其险也如此,嗟尔远道之人胡为乎来哉!剑阁峥嵘而崔嵬,一夫当关,万夫莫开。所守或匪亲,化为狼与豺。朝避猛虎,夕避长蛇;磨牙吮血,杀人如麻。锦城虽云乐,不如早还家。蜀道之难,难于上青天,侧身西望长咨嗟!</p><p>噫吁嚱,危乎高哉!蜀道之难,难于上青天!蚕丛及鱼凫,开国何茫然!尔来四万八千岁,不与秦塞通人烟。西当太白有鸟道,可以横绝峨眉巅。地崩山摧壮士死,然后天梯石栈相钩连。上有六龙回日之高标,下有冲波逆折之回川。黄鹤之飞尚不得过,猿猱欲度愁攀援。青泥何盘盘,百步九折萦岩峦。扪参历井仰胁息,以手抚膺坐长叹。问君西游何时还?畏途巉岩不可攀。但见悲鸟号古木,雄飞雌从绕林间。又闻子规啼夜月,愁空山。蜀道之难,难于上青天,使人听此凋朱颜!连峰去天不盈尺,枯松倒挂倚绝壁。飞湍瀑流争喧豗,砯崖转石万壑雷。其险也如此,嗟尔远道之人胡为乎来哉!剑阁峥嵘而崔嵬,一夫当关,万夫莫开。所守或匪亲,化为狼与豺。朝避猛虎,夕避长蛇;磨牙吮血,杀人如麻。锦城虽云乐,不如早还家。蜀道之难,难于上青天,侧身西望长咨嗟!</p><p>噫吁嚱,危乎高哉!蜀道之难,难于上青天!蚕丛及鱼凫,开国何茫然!尔来四万八千岁,不与秦塞通人烟。西当太白有鸟道,可以横绝峨眉巅。地崩山摧壮士死,然后天梯石栈相钩连。上有六龙回日之高标,下有冲波逆折之回川。黄鹤之飞尚不得过,猿猱欲度愁攀援。青泥何盘盘,百步九折萦岩峦。扪参历井仰胁息,以手抚膺坐长叹。问君西游何时还?畏途巉岩不可攀。但见悲鸟号古木,雄飞雌从绕林间。又闻子规啼夜月,愁空山。蜀道之难,难于上青天,使人听此凋朱颜!连峰去天不盈尺,枯松倒挂倚绝壁。飞湍瀑流争喧豗,砯崖转石万壑雷。其险也如此,嗟尔远道之人胡为乎来哉!剑阁峥嵘而崔嵬,一夫当关,万夫莫开。所守或匪亲,化为狼与豺。朝避猛虎,夕避长蛇;磨牙吮血,杀人如麻。锦城虽云乐,不如早还家。蜀道之难,难于上青天,侧身西望长咨嗟!</p><img data-src="1.jpg" alt=""><img data-src="2.jpg" alt=""><p>噫吁嚱,危乎高哉!蜀道之难,难于上青天!蚕丛及鱼凫,开国何茫然!尔来四万八千岁,不与秦塞通人烟。西当太白有鸟道,可以横绝峨眉巅。地崩山摧壮士死,然后天梯石栈相钩连。上有六龙回日之高标,下有冲波逆折之回川。黄鹤之飞尚不得过,猿猱欲度愁攀援。青泥何盘盘,百步九折萦岩峦。扪参历井仰胁息,以手抚膺坐长叹。问君西游何时还?畏途巉岩不可攀。但见悲鸟号古木,雄飞雌从绕林间。又闻子规啼夜月,愁空山。蜀道之难,难于上青天,使人听此凋朱颜!连峰去天不盈尺,枯松倒挂倚绝壁。飞湍瀑流争喧豗,砯崖转石万壑雷。其险也如此,嗟尔远道之人胡为乎来哉!剑阁峥嵘而崔嵬,一夫当关,万夫莫开。所守或匪亲,化为狼与豺。朝避猛虎,夕避长蛇;磨牙吮血,杀人如麻。锦城虽云乐,不如早还家。蜀道之难,难于上青天,侧身西望长咨嗟!</p><p>噫吁嚱,危乎高哉!蜀道之难,难于上青天!蚕丛及鱼凫,开国何茫然!尔来四万八千岁,不与秦塞通人烟。西当太白有鸟道,可以横绝峨眉巅。地崩山摧壮士死,然后天梯石栈相钩连。上有六龙回日之高标,下有冲波逆折之回川。黄鹤之飞尚不得过,猿猱欲度愁攀援。青泥何盘盘,百步九折萦岩峦。扪参历井仰胁息,以手抚膺坐长叹。问君西游何时还?畏途巉岩不可攀。但见悲鸟号古木,雄飞雌从绕林间。又闻子规啼夜月,愁空山。蜀道之难,难于上青天,使人听此凋朱颜!连峰去天不盈尺,枯松倒挂倚绝壁。飞湍瀑流争喧豗,砯崖转石万壑雷。其险也如此,嗟尔远道之人胡为乎来哉!剑阁峥嵘而崔嵬,一夫当关,万夫莫开。所守或匪亲,化为狼与豺。朝避猛虎,夕避长蛇;磨牙吮血,杀人如麻。锦城虽云乐,不如早还家。蜀道之难,难于上青天,侧身西望长咨嗟!</p><p>噫吁嚱,危乎高哉!蜀道之难,难于上青天!蚕丛及鱼凫,开国何茫然!尔来四万八千岁,不与秦塞通人烟。西当太白有鸟道,可以横绝峨眉巅。地崩山摧壮士死,然后天梯石栈相钩连。上有六龙回日之高标,下有冲波逆折之回川。黄鹤之飞尚不得过,猿猱欲度愁攀援。青泥何盘盘,百步九折萦岩峦。扪参历井仰胁息,以手抚膺坐长叹。问君西游何时还?畏途巉岩不可攀。但见悲鸟号古木,雄飞雌从绕林间。又闻子规啼夜月,愁空山。蜀道之难,难于上青天,使人听此凋朱颜!连峰去天不盈尺,枯松倒挂倚绝壁。飞湍瀑流争喧豗,砯崖转石万壑雷。其险也如此,嗟尔远道之人胡为乎来哉!剑阁峥嵘而崔嵬,一夫当关,万夫莫开。所守或匪亲,化为狼与豺。朝避猛虎,夕避长蛇;磨牙吮血,杀人如麻。锦城虽云乐,不如早还家。蜀道之难,难于上青天,侧身西望长咨嗟!</p><img data-src="3.jpg" alt="">

方法一: 当目标图片的顶部到文档的顶部(包括滚动的距离)的距离小于可视界面+浏览器滚动长度时显示图片。

  const imgs = document.querySelectorAll('img'); //获取全部图片元素const winInner = window.innerHeight; //可视界面的高度function scrollFun() {imgs.forEach((img) => {const imgScrollTop = img.offsetTop; //图片距离文档顶部的距离const bodyScrollTop = document.body.scrollTop || document.documentElement.scrollTop; //浏览器滚动的长度if (imgScrollTop < winInner + bodyScrollTop) { //当图片距离文档顶部的距离小于可视界面的高度+浏览器滚动的长度时加载对应的图片img.setAttribute('src', img.getAttribute('data-src'));}})}window.onscroll = scrollFun;

方法二: 当目标图片的顶部到可视界面的顶部的距离小于可视界面时显示图片。

  const imgs = document.querySelectorAll('img'); //获取全部图片元素const winInner = window.innerHeight; //可视界面的高度function scrollFun() {imgs.forEach((img) => {const scrollTop = img.getBoundingClientRect().top; //目标图片到可视界面顶部的距离if (scrollTop < winInner) {img.setAttribute('src', img.getAttribute('data-src'));}})}window.onscroll = scrollFun;

方法三: 使用 IntersectionObserver 构造函数,进行交叉观察。callback 函数在观察和不观察的时候都会触发。

 //当可视界面滚动到图片区域时调用该回调函数const imgs = document.querySelectorAll('img'); //获取全部图片元素const callback = (entries) => { //entries是一个包含全部 img 元素的数组entries.forEach((entry) => {if (entry.isIntersecting) { //通过对当前的 img 元素的 isIntersecting 属性来进行判定该图片是否在可视界面区域const img = entry.target; //通过 target 属性获取到当前的 img 对象img.setAttribute('src', img.getAttribute('data-src'));observer.unobserve(img); //当该图片已经加载显示后进行 unobserve 不再进行观察}})}const observer = new IntersectionObserver(callback); //创建一个 observer 对象imgs.forEach((img) => {observer.observe(img); //将全部的 img 都进行观察绑定})

推荐视频:JavaScript 图片懒加载 - Web前端工程师面试题讲解

PS: 方法一和方法二只要图片经过了可视界面就会反复调用,因此性能不够优化,而方法三在经过 unobserve 解绑观察后就不会再触发,因此性能较高,但是 IntersectionObserver 构造函数具有兼容性的问题。

Vue路由懒加载

一般来说在 router 文件夹中,使用 import 来导入需要的组件,再将该组件运用到对应的路径上。这就会一进页面就加载全部的组件文件,当后续再怎么切换路径也不会再有请求发生。

import Home from '../views/Home.vue';const routes = [{path: '/',name: 'Home',component: Home,}
]

而Vue路由懒加载则是在跳转到指定的路径之前,该路径对应的组件是不进行加载的,也就是不直接使用 import 进行导入,当跳转该路径时再进行加载,这样能够提高用户的体验,也能够保证功能的使用不受阻碍。

const routes = [{path: '/about',name: 'About',component: () => import('../views/About.vue'),}
]

推荐视频:什么是路由懒加载?【Vue路由】

图片懒加载和Vue路由懒加载相关推荐

  1. vue“路由懒加载” 技术,让网页快速加载 (优化篇)

    (含代码示例.截图演示)让中大型vue项目,按需加载文件,让网页快速渲染! 官方文档:路与懒加载 所谓的路由懒加载: 代码示例 · 对比: 1. 没有优化的代码(截图1 · 省略) import Vu ...

  2. Vue路由懒加载报错问题解决

    使用Vue路由懒加载时报了以下错误: 经过百度发现,出现该问题的原因是: import 属于异步引用组件,需要特殊的babel-loader处理 解决办法: 安装babel用来编译import异步引用 ...

  3. vue路由懒加载的两种方式

    1.当一个vue项目很大的时候,对于一些"暂时"用不到的组件,我们可以不进行加载,等到用到次组件时再加载.这样可以优化spa应用首次加载白屏情况,也给用户更好的体验.这样就是vue ...

  4. Vue 路由懒加载——介绍以及遇到的问题

    使用路由懒加载的原因 当打包构建应用时,JavaScript 包会变得非常大,影响页面加载.如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了. ...

  5. vue路由懒加载_优化vue项目的首屏加载速度

    最近使用vue-cli3构建了一个小型的博客系统,完工之后,build打包出来发现一个chunk-vendors包就有1.1m,部署上去之后,访问的时候,首屏加载非常慢.居然需要21s,体验极差. 这 ...

  6. Vue 路由懒加载

    路由和组件的常用两种懒加载方式: 1.vue异步组件实现路由懒加载 component:resolve=>(['需要加载的路由的地址',resolve]) 2.es提出的import(推荐使用这 ...

  7. vue 路由懒加载(延时加载、按需加载)

    import和require的区别 node编程中最重要的思想就是模块化,import和require都是被模块化所使用. 遵循规范 require 是 AMD规范引入方式 import是es6的一个 ...

  8. Vue 路由懒加载和动态加载

    什么是路由懒加载? 不同组件有不同的 js 文件,当访问相应组件的时候才会加载其相应的js文件,而不是在首页统一加载,这样就优化了首页渲染的时间,提高页面首次渲染时间: 路由懒加载的原理? 底层是一个 ...

  9. Vue路由懒加载(resolve),嵌套路由 3

    懒加载:又叫延时加载,即在需要的时候进行加载,随用即载 使用懒加载的原因: 像vue这种(spy)单页面应用,如果没有使用到懒加载,webpack打包的文件过大,造成进入首页时,加载的资源过多,时间过 ...

最新文章

  1. 【Scratch】青少年蓝桥杯_每日一题_6.09_密码
  2. 网易云信集成视频教程(三):如何通过SDK实现自定义消息?
  3. (保守群组测试 非保守群组测试 二次重复测试 自适应二次重复测试)四种群体测试的C++代码
  4. 二叉树遍历的非递归方法
  5. 计算机会计技术特点,会计电算化的特点
  6. Github使用技巧
  7. Linux基础-获取命令帮助与命令的查找(1)
  8. 微信小程序 13 排行榜的编写
  9. win7系统桌面上计算机不见了怎么办,win7桌面上我的电脑图标不见了怎么办
  10. html引入阿里在线css文件夹,阿里字体css代码引入方法
  11. 1039:判断数正负(测试已通过)
  12. 顶配梧桐树金玉满堂增额终身寿险,对抗“资产荒”的高增长神器
  13. 软件测试行业的优缺点
  14. 计算机网络和因特网笔记
  15. 塔尔斯基是华沙学派的继承人
  16. 解决问题:maven-resources-plugin:3.2.0:resources (default-resources) on project demo: Input length
  17. RK3568平台开发系列讲解(camera篇)Camera2简介
  18. OFC2020论文笔记 M4F.1280 Gbs IMDD PS-PAM-8 Transmission Over 10 km SSMF at O-band For Optical Interconne
  19. 防火墙/UTM/安全网关
  20. 云计算行业分析PPT

热门文章

  1. 并不对劲的bzoj1095:p2056:[ZJOI2007]捉迷藏
  2. 电影网页制作HTML+CSS
  3. 某音App protobuf协议还原逆向分析
  4. opencv基础笔记
  5. 【hadoop权威指南第四版】第五章MR应用【笔记+代码】
  6. Web导出Excel总结
  7. Linux修仙之路——RAID技术
  8. 搭建个人网盘-owncloud
  9. 在vue中使用element-ui二次封装面包屑导条
  10. 翻转课堂十大精彩案例