前端图片预加载和懒加载

前言

在说到对图片资源进行优化时,那就不得不提到图片预加载和图片懒加载,可能很多朋友都了解这两者,但是一直没有很清晰的概念,以及什么时候用,用在什么场景下,今天就来详细的了解一下吧!

图片预加载

图片预加载是指在页面加载时,提前加载页面中需要使用的图片资源,将它们缓存在浏览器中。

这样当用户需要查看这些图片时,就可以直接从缓存中获取,减少等待时间,提升用户体验。

以下是一个简单的栗子:

function preloadImages(urls, allImagesLoadedCallback) {const imgs = [];const loadedCounter = [];urls.forEach((url, i) => {imgs[i] = new Image();// 处理加载计数器imgs[i].onload = imgs[i].onerror = () => {if (loadedCounter.length === urls.length) {allImagesLoadedCallback();}};imgs[i].src = url;});
}preloadImages(['https://example.com/image1.png','https://example.com/image2.png','https://example.com/image3.png'
], () => {console.log('All images have been preloaded');
});

预加载图片:通过 JS 创建 Image 对象,设置其 src 属性为要预加载的图片URL,浏览器会自动下载这些图片资源并缓存在本地。

从缓存获取图片:当页面需要展示这些预加载的图片时,浏览器可以直接从本地磁盘缓存中读取图片数据,不需要再次向服务器发起请求下载图片。

从缓存中获取图片数据比从远程服务器下载要快得多,因为:

  • 无需再次建立网络连接
  • 无需等待服务器响应
  • 无需传输数据的延迟

图片懒加载

图片懒加载是一种在页面滚动到图片位置时才加载图片的技术。这样可以减少页面初始加载时的数据量,加快页面加载速度。当用户滚动到图片位置时,再动态加载并显示图片。

使用Intersection Observer API:这是一个原生浏览器API,用于异步观察目标元素与其祖先元素或顶级文档视口的交叉状态。当目标元素进入视口时,可以触发回调函数来加载图片。

参考文档:

IntersectionObserver - Web API 接口参考 | MDN (mozilla.org)

 一个简单的实例:

const images = document.querySelectorAll('img[data-src]');  const observer = new IntersectionObserver((entries, observer) => {  entries.forEach(entry => {  if (entry.isIntersecting) {  const img = entry.target;  const src = img.dataset.src;  img.src = src;  img.classList.remove('lazy');  observer.unobserve(img);  }  });  
});  images.forEach(image => {  observer.observe(image);  
});

我们为所有带有data-src属性的图片元素设置了一个Intersection Observer。当图片进入视口时,我们从data-src属性中获取实际的图片URL,并将其设置为图片的src属性,从而触发图片的加载。

应用场景

图片预加载应用场景:

  1. 需要快速显示的关键图片:对于一些需要尽快展示的关键图片,如电商网站的产品主图、新闻门户网站的头版头条图片等,可以使用预加载技术,确保这些图片能够快速显示出来,提升首屏体验。
  2. 幻灯片、图片画廊等:在包含幻灯片或图片画廊的页面中,可以预加载相关的一些图片,使得用户切换时,下一张图片已经就绪,可以无延迟显示。
  3. 游戏等富媒体应用:游戏或者富媒体应用往往需要加载大量图片资源,可以在加载界面预加载部分关键资源,缩短真正进入应用的等待时间。
  4. 小型网站或单页面应用:对于页面数量较少、图片资源有限的小型网站或单页面应用,直接预加载所有图片也是可行的,方便后续无延迟加载。

图片懒加载应用场景:

  1. 图文内容丰富的页面:一些包含大量图文内容的页面,如新闻资讯、博客等,初始加载所有图片会拖慢页面速度。此时可使用懒加载,仅加载首屏图片,其他图片滚动到视口时再加载。
  2. 长列表或图库页面电商:详情、图片社交等页面往往包含大量图片列表,如果全部预加载会影响加载性能。使用懒加载可以只加载当前视口内的图片,提高加载速度。
  3. 移动端页面:移动端的网络环境往往不如桌面端稳定,也更加重视首屏加载速度。使用懒加载图片可以减少移动端首屏数据传输量,提升加载体验。
  4. 无限滚动的页面:对于无限滚动加载数据的页面,不可能一次性加载所有图片,此时必须采用懒加载策略。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考高级:BPR 和 BPM概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【四 (1)数据可视化之如何选用正确的图表】

目录 文章导航一、数据分析中可视化的作用1、揭示数据关联和模式2、支持数据分析和决策3、提升沟通和共享效果4、强调关键信息和发现5、增强故事叙述和记忆效果6、有效增强数据交互性数据7、复杂信息易理解8、数据多维度显示 二、如何选用合适的图表1、简洁性避免使用过于复杂或…

软考高级:企业应用集成概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

八 超级数据查看器   讲解稿   详情3  分享和外观

八 超级数据查看器 讲解稿 详情3 分享和外观 app下载地址 下载地址4 ​ 讲解稿全文: 第3讲 分享 顶栏颜色 外观设置 现在讲解分享功能。点击,会打开分享对话框,我们这里演示2个,可以按照标题做出分享,在第一组…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Badge)

可以附加在单个组件上用于信息标记的容器组件。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 支持单个子组件。 说明: 子组件类型:系统组件和自定义组件&#xf…

异次元发卡源码系统/荔枝发卡V3.0二次元风格发卡网全开源源码

– 支付系统,已经接入易支付及Z支付免签接口。 – 云更新,如果系统升级新版本,你无需进行繁琐操作,只需要在你的店铺后台就可以无缝完成升级。 – 商品销售,支持商品配图、会员价、游客价、邮件通知、卡密预选&#…

腾讯在线文档下载文档html格式

腾讯在线文档下载文档html格式 步骤 chrome 浏览器打开该文档(edge不行) 同时按住ctrlp快捷键调出腾讯文档内置的打印页面,打印范围要选择整个工作薄,纸张建议调大一点,边距建议较窄,缩放要选择宽度撑满&…

“风口”上的量化大厂“绣球”抛向中低频人才

量化人才这几年是人才舞台上的“香饽饽”。 遵循着低频不如高频、小厂不如大厂的薪资逻辑,各路人才被各路机构“哄抢”,薪资一路走高。 但2024年的“信号”再强烈不过——量化大厂们到了改变的时候了。 而量化大厂们显然对此已“心知肚明”....... “…

空气源热泵、地源热泵和水源热泵三种热泵的优缺点和选型比较

空气源热泵 空气源热泵是由电动机驱动的,利用空气中的热量作为低温热源,经过空调冷凝器或蒸发器进行热交换,然后通过循环系统,提取或释放热能,利用机组循环系统将能量转移到建筑物内用户需求。 1、适用范围广:适用温度范围在-7至40℃,并且一年四季全天候使用,不受阴、…

软件测试 —— 案例系统缺陷报告

知识: 1、缺陷等级: 1-Urgent(致命错误):影响全局的死机、通信中断、重要业务不能完成 2-Very High(严重错误):规定的功能没有实现或不完整或产生错误结果;使系统不稳定、或破坏数据等 3-High(一般错误):…

Github 2024-03-16 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目2Go项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero Gene…

视频和图像编码标准或格式的发展关系

MPEG-2 继承 MPEG-1: MPEG-2 是 MPEG-1 的继任者,用于更高质量和分辨率的视频传输,如 DVD 和数字电视。 MPEG-4 继承 MPEG-2: MPEG-4 在 MPEG-2 的基础上增加了更多的功能和灵活性,适用于多媒体交互和网络传输。 H.2…

java 如何使用Lambda表达式实现不可变性(Immutability)

java 如何使用Lambda表达式实现不可变性(Immutability) Lambda表达式本身并不直接提供不可变性的特性。不可变性是指一个对象的状态在创建之后不能被修改。Lambda表达式主要用于定义匿名函数,通常用于简化函数式接口的实例创建。 然而&…

java遍历文件目录去除中文文件名

文章目录 一、原始需求二、maven依赖三、核心代码四、运行结果 一、原始需求 需要遍历文件目录及其子目录&#xff0c;找出包含中文字符的文件名&#xff0c;将中文字符去除。 二、maven依赖 pom.xml <dependency><groupId>org.apache.commons</groupId>&…

回调函数的介绍

回调函数的定义&#xff1a;通过函数指针调用的函数。把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数时&#xff0c;被调用的函数即为回调函数。 回调函数不是由该函数的实现方直接调用&#xff0c;而是在特定的 事件或条件时由另一方调用的 example&…

「Linux系列」Linux 系统启动过程

文章目录 一、Linux 系统启动过程1. BIOS/UEFI自检和初始化2. 引导加载程序阶段3. 内核启动阶段4. 用户空间初始化5. 运行级别/目标设置总结 二、Linux系统启动过程中的一些常见错误三、如何解决Linux系统启动中的常见错误1. **无法启动操作系统**2. **硬件问题**3. **内核启动…

NCDA大赛中哪些HTML5设计作品展现出色?

与传统的HTML网页设计相比&#xff0c;HTML5网页设计主要是对网页内容的加强。HTML5已成为目前最流行的标记语言&#xff0c;拥有成熟的社区和广泛的浏览器支持&#xff0c;HTML5完整的功能和强大的扩展性使设计师和开发者能够点铁成金。HTML5可以一手控制更多可控元素&#xf…

js:nginx反向代理nuxt服务器端渲染请求接口获取用户真实ip

配置nginx并重启生效 location / {proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://127.0.0.1:3000/; }获取客户端ip async asyncData({ app, params, req, error, re…

C++/CLI学习笔记9(快速打通c++与c#相互调用的桥梁)

3:判断与循环 所有高级语言都提供了判断和循环语句,C++也不例外。C++提供了if语句和 switch语句来执行判断,提供了while,for和 do-while 语句来执行循环。除此之外,C++还提供了break语句立即退出循环,以及 continue 语句立即开始下一次循环迭代。 所有高级语言都提供了判…

【AI+应用】一步步搭建聊天机器人搭配多种国内外大模型以及api接口调用

如果你看过我之前写的一篇文章 【AI应用】怎么快速制作一个类chatGPT套壳网站&#xff0c; 你可能顺利地使用chatGPT、Gemini&#xff0c; 用得很happy。 突然有一天&#xff0c;你发现一些网站&#xff0c;除了chatGPT、Gemini &#xff0c;还可以切换使用国内外其他的大模型…