前端性能优化篇之懒加载的概念、特点、实现原理、懒加载与预加载的区别

devtools/2024/9/17 15:07:48/ 标签: 前端, 性能优化

目录

  • 懒加载的概念
  • 懒加载的特点
  • 懒加载的实现原理
  • 懒加载与预加载的区别


懒加载的概念

懒加载,也叫做延迟加载或按需加载,是一种用来优化网页性能的方法。在包含许多图片的长网页或应用中,如果一开始就加载所有图片,会导致页面加载缓慢,并且浪费用户的流量和服务器资源。

通过懒加载,页面在加载时只会加载当前可见区域的内容,而不会一次性加载所有图片。当用户滚动页面时,懒加载会动态地加载其他部分的内容,这样可以加快页面加载速度,减少数据传输量,并提高用户体验。

前端开发中,懒加载常用于图片、视频以及需要滚动页面才能看到的内容,比如加载更多的帖子或商品。这种技术帮助页面在开始时只加载必要的内容,用户需要查看其他部分时再进行加载,从而减少初始加载时间。

总的来说,懒加载通过延迟加载页面内容或资源,能够提升页面加载速度,减少数据传输量,并优化用户体验,是一种重要的前端性能优化方法。

懒加载的特点

  1. 节省资源:懒加载能够减少服务器的负担和网络流量,因为它只在需要时加载内容,而不会一次性加载所有资源。

  2. 提升用户体验:通过懒加载,页面可以更快地展示给用户,避免长时间的等待,提高了用户的浏览体验。

  3. 避免加载过多图片的影响:使用懒加载可以防止过多的图片同时加载,从而避免影响其他资源文件的加载,确保网站应用的正常使用。

综上所述,懒加载通过节省资源、提升用户体验和避免加载过多图片的影响,为用户带来更快速的页面加载和更好的浏览体验,特别适用于长页面或包含大量资源的页面。

懒加载的实现原理

懒加载的实现原理主要涉及延迟加载页面中的内容,特别是图片和其他资源,以减少初始加载时的压力和等待时间。

具体来说,对于图片,它们通常是通过src属性来加载的。当网页加载时,浏览器会按照src的地址请求图片资源。懒加载的原理是利用HTML5中的data-xxx属性(这里以data-src为例)来存储图片的路径。在需要加载图片时,通过JavaScript将data-src中的图片路径赋值给src,这样就实现了图片的按需加载,即懒加载。

重点在于确定用户需要加载哪些图片。在浏览器中,用户可见区域内的资源是用户需要的资源。因此,当图片出现在可见区域时,我们可以获取图片的真实地址并赋值给图片元素即可。

对于实现懒加载,可以使用原生JavaScript。关键知识点包括:

  1. window.innerHeight:浏览器可视区域的高度
  2. document.body.scrollTop || document.documentElement.scrollTop:浏览器已滚动的距离
  3. img.offsetTop:图片顶部相对于文档顶部的高度(包括滚动条的距离)
  4. 图片加载条件:img.offsetTop < window.innerHeight + document.body.scrollTop

总体来说,懒加载的实现原理是通过延迟加载页面中的资源,使页面根据用户的需求来获取和展示内容,以提高页面加载速度和用户体验。

懒加载与预加载的区别

懒加载和预加载是为了提高网页性能而采取的两种不同策略。它们的核心区别在于一个是延迟加载,一个是提前加载,而且实现方式和影响也略有不同。

懒加载(也被称为延迟加载)的核心思想是:在用户需要访问图片或其他资源时,再去加载这些内容。这个策略可以减轻服务器的压力,因为不需要一开始就加载所有资源。懒加载适用于网站中有很多图片,或者页面很长的情况,比如电商网站。它的实现原理是,当页面滚动时,判断图片是否进入了可视区域,如果是,就从事先保存好的真实路径中获取图片地址,然后赋值给图片的src属性,这样就实现了图片的延迟加载。

预加载则是在页面加载过程中提前加载可能会在后续访问中用到的资源。这样一来,当用户需要某些资源时,可以直接从缓存中获取,而不需要重新请求服务器,从而减少了等待时间,提高了用户体验。预加载通常应用于未来可能会用到的内容,例如提前加载下一个页面的资源、准备将要播放的视频或音频文件等。这样一来,用户在真正需要这些资源时,可以立刻获取,而不必等待加载时间。

  • 懒加载是根据用户的实际需求来动态加载内容,以提高页面的初始加载速度和用户体验,适用于减轻服务端压力的场景。
  • 预加载是提前加载将来可能会需要用到的资源,以确保用户在需要时能够立即获取,从而提升未来的访问体验。

持续学习总结记录中,回顾一下上面的内容:
懒加载是一种网页优化技术,其概念是延迟加载页面中的资源,特点是在用户需要访问时才加载,可以减轻初始加载压力和节省带宽。
实现原理是利用用户行为监测,将页面中的资源(如图片)的加载时机推迟至用户滚动或点击时,以减少初始加载时间。
懒加载与预加载的主要区别在于,懒加载是根据用户实际需求动态加载内容,而预加载是提前加载将来可能需要用到的资源,用于加快未来访问体验。


http://www.ppmy.cn/devtools/19721.html

相关文章

Facebook的魅力魔法:探访数字社交的奇妙世界

1. 社交媒体的演变与Facebook的角色 在数字化时代&#xff0c;社交媒体已经成为我们日常生活中不可或缺的一部分。而在众多的社交媒体平台中&#xff0c;Facebook 以其深厚的历史和广泛的影响力&#xff0c;成为了全球数亿用户沟通、分享和互动的主要场所。从其初创之时起&…

富唯智能:打造未来机器人教育新标杆

随着科技的飞速发展&#xff0c;机器人教育正逐渐成为培养未来人才的重要领域。富唯智能&#xff0c;作为业内领先的机器人技术提供商&#xff0c;近日推出了一款全新的机器人教育实践平台系统&#xff0c;旨在为学生提供更加丰富、更具挑战性的学习体验。 该平台系统以AUBO-i5…

Flutter 音视频播放器与弹幕系统开发实践

​ 微信公众号&#xff1a;小武码码码 在 Flutter 开发项目的同时&#xff0c;我一直在关注如何利用 Flutter 强大的跨平台特性和丰富的插件生态&#xff0c;来实现媲美原生开发的音视频播放器和弹幕系统。在最近的一个项目中&#xff0c;我将这些想法付诸实践&#xff0c;开…

map_or

map_or 是 Rust 中 Option<T> 和 Result<T, E> 类型提供的一个方法&#xff0c;用于对包含的值执行某种映射操作&#xff0c;并在值不存在&#xff08;对于 Option<T> 是 None&#xff0c;对于 Result<T, E> 是 Err(_)&#xff09;时提供一个默认值。其…

【Flutter 面试题】 为什么Flutter中的Widget使用const注解?

【Flutter 面试题】 为什么Flutter中的Widget使用const注解? 文章目录 写在前面口述回答补充说明示例代码说明写在前面 🙋 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主,51CTO专家博主。2023博客之星TOP153。 👏🏻 正在学 Flutter 的同…

Windows自动化重启python脚本

博主遇到一个需求&#xff1a;每天都需要定时重启一个python脚本&#xff0c;这个脚本是跑在windows电脑上的&#xff0c;下面是博主的解决方法&#xff1a; 获取已经启动的应用的IDkill这个应用ID再次根据指定的Python环境运行这个脚本 文章目录 解决步骤1. 获取已经启动的应…

jQuery

jQuery是一个快速、简洁的JavaScript库&#xff0c;由John Resig创建。它使得HTML文档遍历、事件处理、动画和Ajax等操作更加简单&#xff0c;同时提供了丰富的插件&#xff0c;可以快速开发交互性强的网页应用。jQuery已经成为最受欢迎的JavaScript库之一&#xff0c;被广泛应…

关于Spring事务管理之默认事务间调用问题

由事务的传播行为我们知道, 如果将方法配置为默认事务REQUIRED在执行过程中Spring会为其新启事务REQUIRES_NEW, 作为一个独立事务来执行. 由此存在一个问题。 如果使用不慎, 会引发org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back bec…

调度问题变形的贪心算法分析与实现

调度问题变形的贪心算法分析与实现 一、问题背景与算法描述二、算法正确性证明三、算法实现与分析四、结论 一、问题背景与算法描述 带截止时间和惩罚的单位时间任务调度问题是一个典型的贪心算法应用场景。该问题的目标是最小化超过截止时间导致的惩罚总和。给定一组单位时间…

ios不兼容Svg Wave的动画的解决方法

近日也是用上了SvgWave&#xff0c;十分的好看 Svg Wave - A free & beautiful gradient SVG wave Generator. 大家感兴趣的也可以了解一下 【场景】 使用SvgWave的Animate&#xff0c;并生成svg代码使用&#xff0c;windows web端、朋友的安卓移动端都能够正常执行动画…

vue el-select下拉选择框列表只显示图片,选择图片反显到选择框中

el-select下拉选择框列表只显示图片&#xff0c;选择图片反显到选择框中&#xff0c;直接上代码&#xff0c;效果图在文章末尾 html代码 <el-form-item label"产品星级"><el-selectclearableplaceholder"请选择"change"changeStar"cle…

Java安全之Mojarra JSF反序列化

JavaServer Faces&#xff0c;新一代的Java Web应用技术标准&#xff0c;吸收了很多Java Servlet以及其他的Web应用框架的特性。JSF为Web应用开发定义了一个事件驱动的、基于组件的模型。 其中常用的是Sun&#xff08;现在的Oracle&#xff09;发布的Mojarra和Apache发布的MyF…

组合总和III(Lc216)——剪枝+回溯

找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 解…

Linux中手工创建一个用户

当我们需要新创建一个用户时&#xff0c;有两种方法 1.使用命令添加用户 2.去配置文件里面添加用户 1&#xff0c;使用useradd命令&#xff1a; [rootlocalhost /]# useradd tmg 然后给它设置一个密码 [rootlocalhost etc]# passwd tmg Changing password for user tmg. N…

Android 面试题集锦

和你一起终身学习&#xff0c;这里是程序员Android Android是一种基于Linux的自由及开放源代码的操作系统&#xff0c;主要使用于移动设备&#xff0c;如智能手机和平板电脑&#xff0c;由Google公司和开放手机联盟领导及开发。这里会不断收集和更新Android基础相关的面试题&am…

ZYNQ之嵌入式开发04——自定义IP核实现呼吸灯、固化程序

文章目录 自定义IP核——呼吸灯实验固化程序 自定义IP核——呼吸灯实验 Xilinx官方提供了很多IP核&#xff0c;在Vivado的IP Catalog中可以查看这些IP核&#xff0c;在构建自己复杂的系统时&#xff0c;只使用Xilinx官方的免费IP核一般满足不了设计的要求&#xff0c;因此很多…

Go语言中的goroutine调度是如何实现的?

文章目录 一、M:N调度模型二、GMP模型三、调度过程四、调度优化五、示例代码 在Go语言中&#xff0c;goroutine是一种轻量级的线程&#xff0c;它使得并发编程变得更加简单和高效。而goroutine的调度则是Go运行时&#xff08;runtime&#xff09;系统负责的一个核心任务&#x…

【Tello无人机】无人机编队操作面板实现

为了方便进行无人机的编队演示&#xff0c;以及在各种场景下实现队形的灵活切换&#xff0c;开发了一套专门的上位机控制平台。本文将重点介绍应用于tello无人机的编队操作面板及其核心功能。 操作面板页面 下图展示了操作面板&#xff0c;其中包含5种编队动作和3个可选位置设…

安卓手机APP开发__媒体开发部分__检索元数据

安卓手机APP开发__媒体开发部分__检索元数据 目录 在播放期间 没有播放时 动作照片 在播放期间 媒体的元数据在播放期间能以多种方式来检索。最正常不过的方法 是监听Player.Listener这个监听器的方法onMediaMetadataChanged的事件&#xff0c; 这将提供一个可以使用的Med…

基于CppHttpLib的Httpserver

1 背景 大多数嵌入式设备由于没有屏幕输出&#xff0c;只能通过Web页面来配置。这里利用CPPHttpLib来实现HttpServer。 2 HttpServer HttpServer是利用CPPHttpLib开源库实现的Http服务器CppHttpLib是基于C11的HTTP开源库&#xff0c;开源协议是MIT. CppHttpLib下载地址 2.1 …