外包干了1年....字节跳动面试高频考点,懒加载

在这里插入图片描述

一、文章内容

  • 什么是懒加载
  • 懒加载的优点
  • 什么时候使用懒加载
  • 学习懒加载前置内容
  • 实战懒加载图片

二、什么是懒加载?

  • 从语法角度分析懒加载,懒是adj形容词,加载是名词;或者懒看为副词,加载作为动词,这样就能理解懒加载了就是懒懒的/地加载,更通俗的讲就是通过一种手段来加载.就是一个新名词并不是新的技术.

  • (懒加载(Load On Demand)是一种独特而又强大的数据获取方法,它能够在用户滚动页面的时候自动获取更多的数据,而新得到的数据不会影响原有数据的显示,同时最大程度上减少服务器端的资源耗用。)

  • 那到底是什么技术呢?就是通过JavaScript代码监听列表scroll滚动然后改变可见区域列表的内容,从而实现懒加载.

三、懒加载的优点

  1. 增强用户体验
  2. 减少http的请求
  3. 减少服务器端压力
  4. 服务器的按需加载
  5. 对系统的内存占用率会减少

1.如何增增强用户体验呢?

答案:
当使用懒加载的时候可以降低服务器响应时间,然后浏览器性能不会达到巅峰,不会假死.

2.懒加载如何减少http的请求?

答案:
当一个页面有1000张图片的时候,用户访问该网页,浏览器一下子就会加载1000张图片,访问1000次服务器,假设用户只看到了前10张图片,那么后999张图片是不是就白白加载了?使用懒加载可以很好的讲服务器资源利用好同时减少http的响应. (包含2-3-4)

3.如何减少系统内存的占用率?

答案:
当你使用懒加载无疑是用多少加载多少,不是一下子都加载到内存,一点点加载所以会减少内存的占用率.

4.如何减少代码呢?

四、什么时候使用懒加载

就一句话当你需要请求的资源比较多但是又不需要一次性都加载完毕,用户需要多少加载多少,满足这俩就可以放心使用懒加载了.当我们要访问的数据量过大时,明显用缓存不太合适,也要优先使用懒加载.

比如电商搜索商品页面,百度搜索页…

五、学习懒加载前置内容

会写基本html页面,然后写一一点css样式,jss的话会操作dom就行了,基础页面就不罗嗦了,直接说js代码.

1.这个函数是获取html的高度 document.documentElement.clientHeight.

2.这个函数是JavaScript中Window自带的延迟函数setTimeout,可以让一段JavaScript代码按照一定的时间进行延迟执行.

3.使用这个函数可以获取所有的类名为参数1的标签 document.querySelectorAll,可以按标签查,可以按照类名,也可以按照子孙关系查比如div下的p (div > p).

4.数组的遍历for(i of list),使用该用法进行数组的内容遍历.

    let list = [1,2,3];
    for (item of list){
        console.log(itme); // 1 2 3 
    }

5.这个函数可以获取某个标签的rect值:x,y轴数值,宽度、高度、TOP和bottom、left、right值.如图1所示.getBoundingClientRect()

image.png

图1 rect值

6.这个函数获取某个标签的属性值.getAttribute()

7.这个函数是监听页面事件,主要监听滑动快滚动,addEventListener常见的有click和mousemove…

六、 实战懒加载图片

HTML代码,第一块代码中的ol是页面中首先加载的图片.下面是预加载的一些图片.其中src 是图片的路径,data-original是真实图片的路径.实际情况中第二个ol代码可以通过JavaScript代码自动生成.

 <ol>
            <li><img class="rwo" src=" " alt="" data-original="21.jpg"></li>
            <li><img class="rwo" src=" " alt="" data-original="22.jpg"></li>
            <li><img class="rwo" src=" " alt="" data-original="23.jpg"></li>
        </ol>
 
        <ol>
            <li><img  src=" " alt="" data-original="1.jpg"></li>
            <li><img  src=" " alt="" data-original="2.jpg"></li>
            <li><img  src=" " alt="" data-original="3.jpg"></li>
            <li><img  src=" " alt="" data-original="4.jpg"></li>
            <li><img  src=" " alt="" data-original="5.jpg"></li>
            <li><img  src=" " alt="" data-original="6.jpg"></li>
        </ol>  

CSS代码设置img 的基本样式.

img {
            width: 400px;
            height: 300px;
            display: block;
        }
        .row{
            width: 300px;
            height: 400px;
        }

关键JavaScript代码核心代码都在后面加了注释.

   let view = document.documentElement.clientHeight; // 获得窗口可视高度
        console.log(view);
        function fn1(){
          
            let imgs = document.querySelectorAll('img');  // 获得所有img
         
            var i = 1 ;
            for (let item of imgs) { // 遍历 img
                // 显示图片出现在浏览器的位置
                let rect = item.getBoundingClientRect(); // 获得img 的窗口高度
                console.log( i ,  rect);
                i+=1
                if (rect.bottom >= 0 && rect.top < view) {  // 判断img 标签的 可视窗口
                    item.src = item.getAttribute('data-original') //设置src
                }
            }
        }
 
     
        fn1();//调用函数
        document.addEventListener('scroll',fn1); //监听窗口滚动事件事实更新可视区域的img        

下面是懒加载的网络请求过程.

 <ol>
            <li><img class="rwo" src=" " alt="" data-original="21.jpg"></li>
            <li><img class="rwo" src=" " alt="" data-original="22.jpg"></li>
            <li><img class="rwo" src=" " alt="" data-original="23.jpg"></li>
        </ol>
 
        <ol>
            <li><img  src=" " alt="" data-original="1.jpg"></li>
            <li><img  src=" " alt="" data-original="2.jpg"></li>
            <li><img  src=" " alt="" data-original="3.jpg"></li>
            <li><img  src=" " alt="" data-original="4.jpg"></li>
            <li><img  src=" " alt="" data-original="5.jpg"></li>
            <li><img  src=" " alt="" data-original="6.jpg"></li>
        </ol>
        

在这里插入图片描述

图2 懒加载网络请求

从图2中我们可以看到所有的图片资源,并不是一打开网站就都加载出来,而是随着滚动条滚动动态加载图片资源,也帮助我们验证了懒加载的优点.

七、总结

通过本文的阅读基本可以了解懒加载的本质以及懒加载的使用场景,以及懒加载的实战情况,如果有不懂的地方,自己琢磨一下或者留言.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/549577.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java创建线程池的方法

简介 线程池是一种用于管理和重用线程的机制&#xff0c;它可以有效地管理线程的创建和销毁&#xff0c;减少线程创建和销毁的开销&#xff0c;并且能够控制并发线程数量&#xff0c;避免资源耗尽和系统过载。Java 提供了java.util.concurrent 包来支持线程池的实现。 1.Threa…

密码破解----zip文件密码字典、暴力破解

下边代码包含了暴力破解&#xff0c;使用字典破解zip的密码 from zipfile import ZipFile import os from tqdm import tqdm def passwd(path, pwd):# 获取文件的后缀名suffix_name os.path.splitext(path)[-1][1:]# print(suffix_name)# 如果是zip文件if suffix_name zip:#…

AIGC教育行业全景报告:AI助教和家教成真,学习机迎来新机遇

原文&#xff1a;AIGC教育行业全景报告&#xff1a;AI助教和家教成真&#xff0c;学习机迎来新机遇 - AI新智界 图片来源&#xff1a;由无界AI生成 经过一年的快速迭代&#xff0c;业内对于生成式AI将会率先落地于哪些行业已经有了答案。 教育领域&#xff0c;不仅被OpenAI列…

数字时代的风险评估:AI如何改变贷款分析

每样商品都有价格&#xff0c;但您能否负担得起&#xff1f;贷款非常适合生活中的大额支出&#xff0c;比如买房、买车或支付学费。偿还贷款可能会很棘手。根据最新的《家庭债务和信贷季度报告&#xff08;Quarterly Report on Household Debt and Credit&#xff09;》&#x…

2024年面试工具篇Postman面试题及答案

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

TypeScript之类

一、类的定义 二、对象的创建 class Person{id:number;name:string;age:number 18;constructor(id:number,name:string){this.id id;this.name name;}introduce():string{return hello,I am ${this.name},and I am ${this.age} years old.} }let person new Person(1,zhan…

Linux-docker安装数据库redis

1.拉取redis镜像 docker pull redis # 下载最新的redis版本 docker pull redis:版本号 # 下载指定的redis版本ps&#xff1a;我这是已经下载最新版本的redis 2.查看redis镜像 docker images3.创建挂在路径并授权 mkdir -p /usr/local/redis/data mkdir -p /usr/local…

Ubuntu22.04配置ROS2+PX4仿真环境

Ubuntu22.04配置ROS2PX4仿真环境 主要参考源&#xff1a; https://blog.csdn.net/weixin_44174421/article/details/135827130 https://blog.csdn.net/Zecet/article/details/130474620 一、准备工作 确保网络能够连接到github&#xff0c;出错主要源自于此&#xff1b;确保…

2024/4/16 网络编程day4

/*TCP并发服务器端*/ #include <myhead.h> #define SER_IP "192.168.125.173" #define SER_PORT 8888 void sighanger(int signum){if(signumSIGCHLD){//子进程终止信号while(waitpid(-1,NULL,WNOHANG)>0);//循环回收僵尸进程} }int main(int argc, const c…

03_信号和槽

信号和槽 系统的信号和槽自定义信号和槽Lambda表达式 系统的信号和槽 下面我们完成一个小功能&#xff0c;上面我们已经学习了按钮的创建&#xff0c;但是还没有体现出按钮的功能&#xff0c;按钮最大的功能也就是点击后触发一些事情&#xff0c;比如我们点击按钮&#xff0c;…

12.哀家要长脑子了!

1.189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; ​ 方法一&#xff1a; 要注意这个k是可以大于0的&#xff0c;所以旋转数组的时候要一直保证是在1-n的范围内&#xff1a;%实现 把k个元素旋转放到前面&#xff0c;前面n-k个元素是向后移动的。 class Solution { …

【Phytium】飞腾D2000 UEFI/EDK2 适配 RTC(IIC SD3077)

文章目录 0. env1. 软件2. 硬件 10. 需求1. 硬件2. 软件 20. DatasheetCPURTC 30. 调试步骤1. 硬件环境搭建2. UEFI 开发环境搭建3. 修改步骤1. UEFI 中使能RTC驱动、配置RTC信息等1.1 使能RTC驱动1.2 修改RTC对应的IIC配置信息1.3 解决驱动冲突1.4 验证波形 2. 修改对应RTC驱动…

[lesson36]经典问题解析三

经典问题解析三 关于赋值的疑问 什么时候需要重载赋值操作符&#xff1f;编译器是否提供默认的赋值操作&#xff1f; 编译器为每个类默认重载了赋值操作符 默认的赋值操作符仅完成浅拷贝 当需要进行深拷贝时必须重载赋值操作符 赋值操作符与拷贝构造函数有相同的存在意义 …

零基础入门测试该学什么?超全整理,照着学就对了!

对于很多小白而言&#xff0c;想要转行软件测试岗位&#xff0c;却又怕自己从来没有接触过计算机&#xff0c;底子很薄弱&#xff0c;从而还没开始就打起了退堂鼓。也有许多初学者&#xff0c;在入门的过程中&#xff0c;苦于不知道该学什么&#xff0c;又该从何学起&#xff0…

代码随想录算法训练营第四十二天| 二维背包、一维背包、LeetCode 416.分割等和子集

一、二维背包 文章讲解/视频讲解&#xff1a;https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.html 状态&#xff1a;已解决 1.背包问题介绍 背包问题实则是一类问题的集合&#xff0c;有好多不同小类型&#xff0c…

单位优秀信息宣传员告诉你向媒体投稿你不知道的好方法

作为基层社区信息宣传工作队伍中的一员,我刚开始接手单位的信息宣传投稿任务时,真的是一片茫然。没有任何媒体编辑的熟人朋友,我只能硬着头皮,一家家地去联系媒体,沟通投稿的事宜。这个过程真的是既费事又费力,每次投稿都像是在茫茫大海中寻找那一丝被认可的机会。 因为媒体对稿…

VLAN Mapping原理描述

基本原理 路由器收到带Tag的数据报文后&#xff0c;根据配置的VLAN Mapping方式&#xff0c;决定替换外层Tag中的VLAN ID或优先级&#xff1b;然后进入MAC地址学习阶段&#xff0c;根据源MAC地址映射后的VLAN ID刷新MAC地址表项&#xff1b;根据目的MAC映射后VLAN ID查找MAC地…

T细胞耗竭

目录 T Cell Exhaustion T 细胞衰竭路径上的细胞和分子路标 研究起源 介绍 T 细胞耗竭的发生路径 耗尽的T细胞亚群的解剖分离和迁移 持续TCR刺激的收益递减 通过共调节受体进行发育微调 细胞因子介导的耗尽T细胞亚群的特异性 T细胞耗竭和表观遗传 T Cell Exhaustion…

面试问答之转账功能测试点详解

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

快速排序题目SelectK问题

力扣75.颜色分类 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sor…