当前位置: 首页 > news >正文

不是,到底有多少种图片懒加载方式?

一、也是我最开始了解到的

js方法,利用滚动事件,判断当时的图片位置是否在可视框内,然后进行渲染。
弊端:代码冗杂,你还要去监听页面的滚动事件,这本身就是一个不建议监听的事件,即便是我们做了节流或防抖

二、html中的loading属性,该属性兼容性也可以,不考虑IE

 <img src="" alt="" loading="lazy">

下面图片是两者的对比,图一(没有loading),图二(有)
查看下列对比,需要了解以下关键词:
DOMContentLoadedload

简单介绍(更深层的我也不懂):DOMContentLoaded是指在页面html解析完成时触发(此时或许没有加载完成一些外部资源),load在页面所有资源加载完成后执行,也就是渲染完成时间

在多次ctrl+f5刷新页面下观察到的对比:
图一的load(即红色的加载文字)明显比图二时间长(长的很多),并且图一的DOMContentLoaded时间基本与图二DOMContentLoaded的相同(即在解析html时,页面几乎没有额外的压力,甚至图二的时间会比图一时间更少)。并且图二的DOMContentLoaded和load几乎保持一致
在这里插入图片描述
在这里插入图片描述

由上可以看到,loading=lazy,对图片起到的懒加载效果时蛮好的,并且我们不需要写js代码,或者引入第三方的东西来实现。

但其实,这样并没有达到loading=lazy的极限,我们用到了loading=lazy,但是在页面一开始的时候却仍然发送了10条图片地址的请求,这个是因为:图片没有加载的时候宽高为0,所以一开始的时候它认为我们所有的图片都显示了(因为宽高为0,挤在一起),因此,我们需要给loading=lazy的图片标签添加一个默认的宽高。借此出现了下面的情况,在页面初始化的时候仅仅发送了4条图片请求,并非上面两张图片的10条。

在这里插入图片描述

三、decoding=async

告诉浏览器使用何种方式解析图像数据,三个值sync: 同步解码图像,保证与其他内容一起显示,async: 异步解码图像,加快显示其他内容,auto: 默认,由浏览器决定哪种方式更适合用户。

这个属性的优点我也没有发现(-_- !!),但是查阅资料,它确实可以优化图片,情景就是:我们不希望图片的渲染解码影响页面的其他内容的展示,可以使用 decoding=async 选项。

四、js补充—IntersectionObserver

IntersectionObserver这个相当于js监听滚动的一种性能提升,也就说,这个对象能告诉我们某个元素是否出现在当前视图上,并且给我们一个回调。
具体操作,构建IntersectionObserver对象

 const inter = new IntersectionObserver(callback)//callback便是回调,这里面默认接受一个对象,//callback应该放在inter上面定义,不然会显示undefined,但是为了方便观察,我移到了下面进行定义const callback = (entries) =>{//entries是一个数组,里面数据包含inter 所监听的元素//列如:inter.observe(ele)   那么ele的数据便会存放在entries数组中,//其中该ele的isIntersecting属性为true表示元素出现在当前视图上,false相反console.log(entries)//然后我们一般的话,会同时inter.observe(元素名)监听多个元素,因此entries处理方式为遍历处理(foreach)}

注意点:页面渲染完成IntersectionObserver会自动执行一次,如果同时observe多个元素,IntersectionObserver默认执行的时候entries为多个元素(observe处理的元素数量一致),IntersectionObserver的回调会在目标元素消失、出现在视图时触发回调,此时的回调的参数entries表示满足上列消失、出现条件的元素

或许描述的不清楚但是代码贴在下面,新建html文件,整个代码复制运行即可自行观看

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><style>.div1 {height: 2000px;}.div2 {height: 400px;width: 400px;background-color: red;margin-top: 1000px;}.div3 {width: 100px;height: 20px;background-color: yellow;}</style>
</head><body><div class="div1"><span id="span1">tianjiaqing</span><div class="div2" id="div2"><div class="div3" id="div3"></div></div></div>
</body>
<script>const fn = (entries) => {console.log('消失/出现在视野里,导致触发了该回调', entries);}const inter = new IntersectionObserver(fn)inter.observe(div2)inter.observe(div3)inter.observe(span1)
</script>
</html>

相关文章:

不是,到底有多少种图片懒加载方式?

一、也是我最开始了解到的 js方法&#xff0c;利用滚动事件&#xff0c;判断当时的图片位置是否在可视框内&#xff0c;然后进行渲染。 弊端&#xff1a;代码冗杂&#xff0c;你还要去监听页面的滚动事件&#xff0c;这本身就是一个不建议监听的事件&#xff0c;即便是我们做了…...

CAD坐标有哪些输入方式?来看看这些CAD坐标输入方式!

在CAD设计过程中&#xff0c;有时需要通过已知坐标点来画图&#xff0c;有时又需要通过已知角度和距离来画图&#xff0c;在这种情况下&#xff0c;由于已知条件不同&#xff0c;所以便需要用不同的方式来定位点。那么&#xff0c;你知道CAD坐标有哪些输入方式吗&#xff1f;本…...

铰链、弹簧,特殊的物理关节

title: 铰链、弹簧&#xff0c;特殊的物理关节 date: 2023-02-28T13:32:57Z lastmod: 2023-02-28T14:24:06Z 铰链关节&#xff08;Hinge Join&#xff09;组件 组件-Physics-Hinge Join Anchor 当物体挂载铰链组件以后&#xff0c;组件下Anchor等同于边长为1的立方体。当这…...

Android Studio相关记录

目录Android Studio 便捷插件Android LogcatJava文件的类头模板Android Studio 使用遇到的问题解决方案org.jetbrains.annotations.NullableBuild 控制台编译输出中文乱码Terminal 使用 git 命令窗口git 命令窗口中文乱码Android Studio 便捷插件 Android Logcat 配置路径 Fi…...

Linux 基础介绍-基础命令

文章目录01 学习目标02 Linux/Unix 操作系统简介2.1 Linux 操作系统的目标2.2 Linux 操作系统的作用2.3 Unix 家族历史2.4 Linux 家族历史2.5 Linux 和Unix 的联系2.6 Linux 内核介绍2.7 Linux 发行版本2.8 Unix/Linux 开发应用领域介绍03 Linux 目录结构3.1 Win 和Linux 文件系…...

Linux 进程:程序地址空间 与 虚拟内存

目录一、程序地址空间二、虚拟地址空间1.虚拟内存的原理2.使用虚拟内存的原因&#xff1f;3.如何实现虚拟空间&#xff1f;4.使用虚拟内存的好处本文主要介绍程序地址空间和虚拟地址空间的概念&#xff0c;理解了虚拟地址空间&#xff0c;才可以更好的理解物理内存和进程pcb之间…...

python 密码学编程

最近在看一本书。名字是 python密码学编程。在此做一些笔记&#xff0c;同时也为有需要的人提供一些参考。 ******************************************************************** *        quote : "http://inventwithpython.com/"          …...

【C++ | bug | 运算符重载】定义矩阵(模板)类时,使用 “友元函数” 进行 * 运算符重载时编译报错

作者&#xff1a;非妃是公主 专栏&#xff1a;《C》 博客地址&#xff1a;https://blog.csdn.net/myf_666 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录专栏推荐一、类的声明及函数定义二、错误信息三、问题…...

数学小课堂:无穷小(以动态的眼光看待世界,理解无限的世界)

文章目录 引言I 芝诺四个著名的悖论1.1 二分法悖论:从A点到B点是不可能的。1.2 阿喀琉斯悖论:阿喀琉斯追不上乌龟。1.3 飞箭不动悖论:射出去的箭是静止的。1.4 基本空间和相对运动悖论II 回答芝诺的悖论2.1 阿喀琉斯悖论2.2 相对运动悖论III 无穷小3.1 无穷小的定义3.1 无穷…...

leetcode 427. Construct Quad Tree(构建四叉树)

刚看到题的时候是懵的&#xff0c;这也太长了。到底是要表达什么呢。 不妨把这个矩阵看成一个正方形的图片&#xff0c;想象你在处理图片&#xff0c;从整体逐步到局部。 刚开始看一整张图片&#xff0c;如果是全0或全1&#xff0c;这个就是叶子节点&#xff0c;怎么表达叶子节…...

Spring Boot 3.0系列【2】部署篇之使用GraalVM构建原生镜像

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot版本2.7.0 文章目录概述JIT & AOTJIT &#xff08;动态编译&#xff09;AOT&#xff08;静态编译&#xff09;GraalVM简介运行模式Native Image&#xff08;原生镜像&#xff09;…...

复习知识点十之方法的重载

目录 方法的重载 练习1: 练习1: 数组遍历 练习2: 数组的最大值 练习3: 练习4: 复制数组 基本数据类型和引用数据类型 方法的重载 Java虚拟机会通过参数的不同来区分同名的方法 练习1: public class Test4 {public static void main(String[] args) {//调用方法 // …...

火爆全网的ChatGPT 和AI 可以为项目经理做什么?

作为一款人工智能聊天机器人&#xff0c;ChatGPT因其逼真和人性化的特性而风靡全球&#xff0c;无疑是当今技术的新流行。人工智能 (AI) 有可能彻底改变许多行业&#xff0c;包括项目管理&#xff0c;及时了解最新技术以及它如何影响你的工作至关重要。于是&#xff0c;我们与C…...

前端面试题 —— HTML

目录 一、src 和 href 的区别 二、对 HTML 语义化的理解 三、DOCTYPE(⽂档类型) 的作⽤ 四、script 标签中 defer 和 async 的区别 五、常⽤的 meta 标签有哪些&#xff1f; 六、HTML5 有哪些更新 八、行内元素有哪些&#xff1f;块级元素有哪些&#xff1f; 空(void)元素…...

同为(TOWE)电源线让家用电器随心放置

如今&#xff0c;随着科技水平的不断发展&#xff0c;人们工作、生活中越来越离不开各类电子设备和电器产品。当用电器数量多了以后&#xff0c;由于电器设备原有电线长度的限制&#xff0c;常常需要通过连接接线板来延长电器设备的电能传输线路。电源线虽然看着是一件不起眼的…...

2023上半年数学建模竞赛汇总(报名时间、比赛时间、难易程度、含金量、竞赛官网)

1、美国大学生数学建模竞赛等级&#xff1a;国家级是否可跨校&#xff1a;否竞赛开始时间&#xff1a;2月17日~2月21日综合难度&#xff1a;⭐⭐⭐⭐ 竞赛含金量&#xff1a;⭐⭐⭐⭐⭐竞赛官网&#xff1a;https://www.comap.com/2、MathorCup高校数学建模挑战赛---大数据竞赛…...

RK3568平台开发系列讲解(驱动基础篇)SMP(Symmetrical Multi-Processing)

🚀返回专栏总目录 文章目录 一、linux SMP 和 AMP二、linux SMP的启动流程三、CPU的描述:cpumask四、CPU之间的关系沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 SMP(Symmetrical Multi-Processing)。 一、linux SMP 和 AMP 目前支持多核处理器的实时操…...

HIVE --- zeppelin安装

目录 把zeppelin压缩包拷贝到虚拟机里面 解压 改名 修改配置文件 编辑zeppelin-site.xml—将配置文件的ip地址和端口号进行修改 编辑 zeppelin-env.sh—添加JDK和Hadoop环境 配置环境变量 刷新环境变量 拷贝Hive文件 拷贝外部文件 启动zeppelin 启动Hadoop&Hi…...

数据分析中的变量解释

1.数值变量Numerical Variables 数值型变量&#xff08;metric variable&#xff09;是说明事物数字特征的一个名称&#xff0c;其取值是数值型数据。如“产品产量”、“商品销售额”、“零件尺寸”、“年龄”、“时间”等都是数值型变量&#xff0c;这些变量可以取不同的数值…...

django-博客(一)

一、 1、环境&#xff1a;pycharm&#xff0c;python3.6&#xff0c;django3&#xff0c;mysql8.0 2、创建项目 3、把html和css样式那些导入到文件夹中&#xff0c;​​​​​​然后配置这些文件夹的路径&#xff0c;再添加首页视图。 改成反向解析 python manage.py runserv…...

Shell高级——Linux中的文件描述符

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 前言 Linux中一切接文件&#xff0c;比如 C 源文件、视频文件、Shell脚本、可执行文件等&#xff0c;就连键盘、显示器、鼠标等硬件设备也都是文件。 一个 Linux 进程可以打开成百上…...

洗地机哪个品牌最好用?家用洗地机十大名牌

这几年清洁类的小家电非常热门&#xff0c;无线吸尘器、扫地机器人、扫拖一体机、洗地机和擦窗机器人层出不穷&#xff0c;各个品牌百花齐放。这些清洁电器&#xff0c;确实为家庭卫生清洁带来了很大的便捷。但要把这些产品一次性买齐是一笔不小的开销&#xff0c;而且需要收纳…...

java多线程(十)线程休眠

一、sleep()介绍 sleep() 定义在Thread.java中。 sleep() 的作用是让当前线程休眠&#xff0c;即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。sleep()会指定休眠时间&#xff0c;线程休眠的时间会大于/等于该休眠时间&#xff1b;在线程重新被唤醒时&#xff0c;它会由…...

Leetcode20. 有效的括号

一、题目描述&#xff1a; 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确…...

Android 项目必备(四十三)-->Android 开发者的 new 电脑

前言 作为 Android 开发者&#xff0c;当你新入职一家公司&#xff0c;拿到新发的电脑&#xff0c;你会对电脑干点啥&#xff1f; 安装开发环境&#xff1f;装软件&#xff1f;你是否还会铺天盖地到处找之前电脑备份的东西&#xff1f;又或者还想不起来有什么上一台电脑好用的…...

如何水平和垂直居中元素

跳到主内容 我试图将我的选项卡内容垂直居中&#xff0c;但是当我添加 CSS 样式时display:inline-flex&#xff0c;水平文本对齐消失了。 如何为每个选项卡同时对齐文本 x 和 y&#xff1f; * { box-sizing: border-box; } #leftFrame {background-color: green;position: a…...

Rust泛型Generics

泛型 泛型&#xff08;Generics&#xff09;是一种程序设计风格&#xff0c;它允许程序员在强类型语言&#xff08;例如rust&#xff0c;c#&#xff0c;c&#xff09;中编写代码时使用通用类型。以rust为例&#xff0c;如果你想实现一个通用的add函数&#xff0c;让其在u8, i3…...

六、并发集合

文章目录并发集合ConcurrentHashMap存储结构存储操作put方法putVal方法-散列算法putVal方法-添加数据到数组&初始化数组putVal方法-添加数据到链表扩容操作treeifyBin方法触发扩容tryPreSize方法-针对putAll的初始化操作tryPreSize方法-计算扩容戳并且查看BUGtryPreSize方法…...

PHY调试经验

1. PHY调试过程 1.设备树中配置正确的PHY ADDR、PHY ID、clause 45或者22协议&#xff0c;PHY ADDR配置不正确会导致MDC/MDIO通信不正常或失败&#xff0c;PHY ID用于匹配PHY驱动程序。 2.通过MDC/MDIO读写PHY ID并对比datasheet中的PHY ID&#xff0c;确认MDC/MDIO通信是否正常…...

从Java培训班出来好找工作吗?

个人觉得这个问题要从两方面来看&#xff0c;首先是培训班的Java课程质量如何&#xff0c;是否贴合用人单位实际需求&#xff0c;学出来的技术能对口&#xff1b;其次是培训班是否保障就业&#xff0c;有就业机会渠道推荐&#xff0c;比如老学员内推、合作企业人才输送以及企业…...

广州专业的网站建设公司哪家好/seo网站排名优化软件

效果图 核心设计思路 一、绘制圆环 我们可以通过将两个半径不同的圆进行相减来得到圆环 /// @note 圆环float mask = Circle(uv, vec2(0., 0.), 0.5, 0.01);mask -= Circle(uv, vec2(0., 0.), 0.35, 0.01); 二、营造旋转 将 uv 坐标换算到极坐标的角度(并重新映射到 0.-…...

福田莲花北网站建设/个人博客网页设计

1. 悲观锁与乐观锁我们都知道&#xff0c;cpu是时分复用的&#xff0c;也就是把cpu的时间片&#xff0c;分配给不同的thread/process轮流执行&#xff0c;时间片与时间片之间&#xff0c;需要进行cpu切换&#xff0c;也就是会发生进程的切换。切换涉及到清空寄存器&#xff0c;…...

网站建设视频上传/seo系统源码出售

昨天在C#执行oracle的sql语句时&#xff0c;总是报错&#xff0c;原先在pl/sql 执行sql语句是可以的&#xff0c;在C#执行就报“算术运算导致溢出”问题 SQL语句 select A.SKU_ID 商品标识,A.COLOR 货主编码,B.NAME 货主名称,C.NAME 商品名称,A.RCV_DATE_TIME 入库日期,A.XPIRE…...

有限公司英文/整站优化seo

1.震动是系统的服务,首先需添加震动权限 <uses-permission android:name"android.permission.VIBRATE" /> 2.实现震动方法代码 public static void sendVibrater(Context mContext) { // 间隔震动Vibrator mVibrator (Vibrator) mContext.getSystemService(m…...

赣州网站建设公司/泰安百度推广电话

百分百题库提供道路运输安全员考试试题、道路运输从业人员考试预测题、道路安全员考试真题、道路运输从业人员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 178.客运企业应当逐步建立客运车辆技术信息化管理系统&#xff…...

企业网站建设模板多少钱/轻松seo优化排名 快排

转载自&#xff1a;https://www.insp.top/learn-laravel-container 容器&#xff0c;字面上理解就是装东西的东西。常见的变量、对象属性等都可以算是容器。一个容器能够装什么&#xff0c;全部取决于你对该容器的定义。当然&#xff0c;有这样一种容器&#xff0c;它存放的不是…...