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

【前端】【面试】在前端开发中,如何实现图片的渐进式加载,以及这样做的好处是什么?

题目:在前端开发中,如何实现图片的渐进式加载,以及这样做的好处是什么?

在浏览器端实现图片的“渐进式加载”(Progressive Image Loading)常用的三种方式

方法思路典型实现要点适用场景优缺点简述
1. 使用渐进式/交错式编码的图像(Progressive JPEG、Interlaced PNG/WebP)服务器直接返回经过特殊编码的单一文件。解码器先快速渲染低分辨率的整体预览,再逐步填充细节扫描• 在构建/CI 阶段用 mozjpeg -progressivepngcrush -interlace 或 WebP 的 -preset picture -m 6 -q 75 等参数输出文件• 浏览器自动解码,无需额外 JS静态资源托管、关键首屏图片:零额外脚本;完全利用浏览器解码优化。:仅首屏能感知;需额外生成图像版本
2. “Blur‑Up” 技巧(先模糊低清缩略图,再替换高清)页面先加载几 KB 的极小图(base64 inline 或独立 URL),CSS filter: blur(20px) + transform: scale(1.1);JS 监听完整图加载完成后无缝替换• 在构建期生成极小 JPG/WebP(宽高 10–40 px)。• <img src="low.jpg" data-src="hi.jpg" class="blur-up">onload/IntersectionObserverimg.src = img.dataset.src,加载完移除 blur 类内容图、瀑布流、博客配图:平滑视觉过渡,网络差时体验佳。:实现比方式 1 复杂;两次下载稍增流量
3. 响应式懒加载 + 渐次分辨率(Responsive Lazy Progressive)结合 <picture>+srcset & sizes 生成多档分辨率;利用 loading="lazy"IntersectionObserver 只在视窗内按需加载,从较小尺寸开始请求,onload 再替换更高清版本• 构建期输出 3–5 档(200 px, 400 px, 800 px…)• <source srcset="img@200.jpg 200w, img@400.jpg 400w, …">data-full="img@1600.jpg";首次解码后 JS 再请求 data-full图库/电商列表、长页面:节省首字节与总体流量;SEO 友好。:管理多版本图;需要懒加载脚本逻辑

关键实现细节示例(以“Blur‑Up + 懒加载”方案为例)

<style>
.blur-up {filter: blur(20px);transform: scale(1.1);transition: filter 400ms ease, transform 400ms ease;
}
.blur-up.loaded {filter: blur(0);transform: scale(1);
}
</style><img class="lazy blur-up"src="thumbs/cat-20w.jpg"             <!-- 2‑5KB 低清缩略图 -->data-src="photos/cat-800w.jpg"      <!-- 高清版本 -->alt="可爱的猫">
<script>
const lazyImgs = document.querySelectorAll('img.lazy');
const io = new IntersectionObserver(entries=>{entries.forEach(({target, isIntersecting})=>{if (!isIntersecting) return;const full = target.dataset.src;if (full) {target.src = full;                 // 开始加载高清target.removeAttribute('data-src');target.addEventListener('load', ()=>{target.classList.add('loaded');  // 去除 blur}, {once:true});}io.unobserve(target);});
},{rootMargin:'200px'});
lazyImgs.forEach(img=>io.observe(img));
</script>

渐进式加载带来的好处

  1. 改善首屏感知性能 (Perceived Performance)
    • 用户迅速看到“有内容”而非空白,提高 LCP/FMP 指标与心理满意度。
  2. 降低跳出率 & 提升转化
    • 多项 A/B 结果显示,模糊预览可减少等待焦虑,电商场景转化率↑。
  3. 带宽友好
    • 先传输几 KB 或较低分辨率,移动网络下耗时显著缩短;视口外图片不加载节约总体流量。
  4. 渐进增强兼容性好
    • 不支持 JS 的情况下,方式 1 依然生效;支持 JS 的浏览器可享受更平滑的过渡。
  5. SEO 与可访问性友好
    • <img> 标签仍在 DOM 中,搜索引擎可解析;占位防止 CLS 抖动,助 Core Web Vitals 评分。

生产实践 Tips

  • 构建自动化:在 CI 中用 Sharp/Imagemin 统一输出渐进式与多分辨率图;Webpack loader 或 Vite 插件自动生成 srcset/缩略图并替换 HTML。
  • IntersectionObserver 阈值调优rootMargin: '200px' 允许图片在滚动前就被预取,避免用户刚到视口才加载出现“闪烁”。
  • CLS 处理:为图片预留宽高比 (aspect-ratio 或占位 div) 防止布局偏移。
  • WebP/AVIF 首选:现代浏览器支持度高,文件更小,可配合 type="image/avif"<source> 提升效率。

相关文章:

【前端】【面试】在前端开发中,如何实现图片的渐进式加载,以及这样做的好处是什么?

题目&#xff1a;在前端开发中&#xff0c;如何实现图片的渐进式加载&#xff0c;以及这样做的好处是什么&#xff1f; 在浏览器端实现图片的“渐进式加载”&#xff08;Progressive Image Loading&#xff09;常用的三种方式 方法思路典型实现要点适用场景优缺点简述1. 使…...

单精度浮点运算/定点运算下 MATLAB (VS) VIVADO

VIVADO中单精度浮点数IP核计算结果与MATLAB单精度浮点数计算结果的对比 MATLAB定点运算仿真&#xff0c;对比VIVADO计算的结果 目录 前言 一、VIVADO与MATLAB单精度浮点数运算结果对比 二、MATLAB定点运算仿真 总结 前言 本文介绍了怎么在MATLAB中使用单精度浮点数进行运算…...

基于大模型对先天性巨结肠全流程预测及医疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型在先天性巨结肠预测中的理论基础 2.1 大模型概述 2.2 大模型预测先天性巨结肠的可行性分析 三、术前预测与准备方案 3.1 大模型对术前病情的预测 3.1.1 疾病确诊预测 3.1.2 病情严重程度评估 3.2 …...

【AI插件开发】Notepad++ AI插件开发1.0发布和使用说明

一、产品简介 AiCoder是一款为Notepad设计的轻量级AI辅助插件&#xff0c;提供以下核心功能&#xff1a; 嵌入式提问&#xff1a;对选中的文本内容进行AI分析&#xff0c;通过侧边栏聊天界面与AI交互&#xff0c;实现多轮对话、问题解答或代码生成。对话式提问&#xff1a;独…...

【MySQL数据库入门到精通-07 函数-字符串函数、数值函数、日期函数和流程函数】

文章目录 一、字符串函数1. MySQL中的函数主要分为以下四类&#xff1a; 字符串函数、数值函数、日期函数、流程函数。下面是字符串函数常见的函数&#xff0c;见下表。2.具体代码实现3.结果 二、数值函数1.知识点2.具体代码实现3.结果 三、日期函数1.知识点2.具体代码实现3.结…...

Python图像处理——基于Retinex算法的低光照图像增强系统

1.项目内容 &#xff08;1&#xff09;算法介绍 ①MSRCR (Multi-Scale Retinex with Color Restoration) MSRCR 是多尺度 Retinex 算法&#xff08;MSR&#xff09;的扩展版&#xff0c;引入了色彩恢复机制以进一步提升图像增强质量。MSR 能有效地压缩图像动态范围&#xff…...

如何在JDK17项目中改成1.8

1.调整 Spring Boot 版本 由于 Spring Boot 3.x 最低要求 JDK 17&#xff0c;所以如果要使用 JDK 8&#xff0c;需要把 spring-boot-starter-parent 的版本降低到 2.7.x 系列&#xff0c;这个系列是支持 JDK 8 的。示例如下&#xff1a; <parent><groupId>org.sp…...

【不同名字的yolo的yaml文件名是什么意思】

以下是这些 YOLO 系列配置文件的详细解析&#xff0c;按版本和功能分类说明&#xff1a; 一、YOLOv3 系列 文件名核心特性适用场景yolov3.yaml原始 YOLOv3 结构&#xff0c;3 尺度预测&#xff08;13x13,26x26,52x52&#xff09;通用目标检测yolov3-spp.yaml增加 SPP&#xff…...

Zephyr kernel Build System (CMake)介绍

目录 概述 1. 结构介绍 2 构建和配置阶段 2.1 配置阶段 2.2 Cmake编译 3 Zephy项目目录结构 3.1 文件架构 3.2 文件content 概述 本文主要介绍Zephyr kernel Build System CMake的功能&#xff0c;以及使用该工具构建项目&#xff0c;并详细介绍了每个目录以及目录下文…...

相对论大师-记录型正负性质BFS/图论-链表/数据结构

看到这一题我的第一个思路就是双向bfs 起点是a&#xff0c;终点还是a&#xff0c;但是flag是相反的&#xff08;“越”的方向&#xff09; tip1.可以用字典vis来存储flag 刚开始初始化时vissta,visend一个对应0、1 要求两个队列相…...

研发内控新规下的合规之道:维拉工时助力企业穿越IPO审查雷区

&#x1f4cc; 背景 | 全面注册制下&#xff0c;研发内控成“必修课” 在全面注册制背景下&#xff0c;证监会发布的《监管规则适用指引——发行类第9号&#xff1a;研发人员及研发投入》&#xff08;简称“发行类9号”&#xff09;&#xff0c;对企业的研发费用归集、研发工时…...

Jenkins流水线管理工具

文章目录 前言&#xff1a; DevOps时代的自动化核心 —Jenkins一、Jenkins是什么&#xff1f;二、Linux安装Jenkinswar包方式安装依赖环境下载 Jenkins WAR 包启动 Jenkins 服务启动日志验证配置插件镜像源 docker镜像方式安装依赖环境拉取 Jenkins 镜像运行 Jenkins 容器获取初…...

嵌入式开发:基础知识介绍

一、嵌入式系统 1、介绍 以提高对象体系智能性、控制力和人机交互能力为目的&#xff0c;通过相互作用和内在指标评价的&#xff0c;嵌入到对象体系中的专用计算机系统。 2、分类 按其形态的差异&#xff0c;一般可将嵌入式系统分为&#xff1a;芯片级&#xff08;MCU、SoC&am…...

el-table中el-input的autofocus无法自动聚焦的解决方案

需求 有一个表格展示了一些进度信息&#xff0c;进度信息可以修改&#xff0c;需要点击进度信息旁边的编辑按钮时&#xff0c;把进度变为输入框且自动聚焦&#xff0c;当鼠标失去焦点时自动请求更新接口。 注&#xff1a;本例以vue2 element UI为例 分析 这个需求看着挺简单…...

一文了解智慧教育顶刊TLT的研究热点

本文聚焦于IEEE Transactions on Learning Technologies&#xff08;TLT&#xff09;期刊&#xff0c;通过图文结合的方式&#xff0c;梳理了2025年第18卷的研究热点&#xff0c;帮助读者把握教育技术与人工智能交叉领域的研究进展&#xff0c;深入了解智能学习系统、自适应学习…...

统计术语学习

基期、现期 作为对比参照的时期称为基期&#xff0c;而相对于基期的称为现期。 描述具体数值时我们称之为基期量和现期量。 【例 1】2017 年比 2016 年第三产业 GDP 增长 6.8%&#xff0c; &#xff08;2016&#xff09;为基期&#xff0c;&#xff08;2017&#xff09; 为现…...

NEGATIVE LABEL GUIDED OOD DETECTION WITH PRETRAINED VISION-LANGUAGE MODELS

1. 介绍: 这篇论文也是基于CLIP通过后处理的方法实现的OOD的检测,但是设计点在于,之前的方法是使用的ID的类别,这篇工作是通过添加一些在语义上非常不同于ID的类别的外分布类来做的OOD检测。 CLIP做OOD检测的这个系列里面我看的以及记录的第一篇就是MCM的方法,这也是确实是…...

飞机会员日

各航空公司会员日日期 主要航空公司会员日整理如下&#xff08;数据截至2025年3月最新信息&#xff09;&#xff1a;‌ 1 2 ‌中国国际航空&#xff08;国航&#xff09;‌ 每月"同月同日"&#xff08;如1月1日、2月2日类推&#xff09; ‌中国南方航空&#xff08…...

解读《数据资产质量评估实施规则》:企业数据资产认证落地的关键指南

随着“数据要素市场”建设加速&#xff0c;数据资产逐步成为企业核心资产之一。2024年4月&#xff0c;由中国质量认证中心&#xff08;CQC&#xff09;发布的《数据资产质量评估实施规则》&#xff08;编号&#xff1a;CQC96-831160-2024&#xff09;正式实施&#xff0c;为企业…...

常用第三方库:flutter_boost混合开发

常用第三方库&#xff1a;flutter_boost混合开发 前言 在移动应用开发中&#xff0c;混合开发是一个非常重要的话题。特别是对于已有原生应用想要引入Flutter的团队来说&#xff0c;如何实现Flutter页面和原生页面的无缝整合就显得尤为关键。本文将深入介绍flutter_boost这个…...

论分布式事务及其解决方案 架构师论文范文(考试笔记)

请围绕“论分布式事务及其解决方案”论题&#xff0c;依次从以下三个方面进行论述。 1、概要叙述你参与分析设计的软件项目以及你在其中所承担的主要工作。 2、请介绍4种分布式事务的解决方案及简单说明。 3、具体阐述你参与的软件项目是如何做到分布式事务的&#xff0c;过程中…...

ROS 快速入门教程04

12.激光雷达工作原理 激光雷达的作用是探照周围障碍物的距离&#xff0c;按照测量维度可以分为单线雷达和多线雷达。 按照测量原理可以分为三角测距雷达和TOF雷达。按照工作方式可以分为固态雷达和机械旋转雷达。 本次讲解以TOF雷达为例&#xff0c;雷达发射器发射激光遇到障碍…...

2025 年导游证报考条件新政策解读与应对策略

2025 年导游证报考政策有了不少新变化&#xff0c;这些变化会对报考者产生哪些影响&#xff1f;我们又该如何应对&#xff1f;下面就为大家详细解读新政策&#xff0c;并提供实用的应对策略。 最引人注目的变化当属中职旅游类专业学生的报考政策。以往&#xff0c;中专学历报考…...

vscode切换Python环境

跑深度学习项目通常需要切换python环境&#xff0c;下面介绍如何在vscode切换python环境&#xff1a; 1.点击vscode界面左上角 2.在弹出框选择对应kernel...

Spark-Streaming(三)

一. kafka和flume的整合 任务需求一:利用flume监控某目录中新生成的文件&#xff0c;将监控到的变更数据发送给kafka&#xff0c;kafka将收到的数据打印到控制台 1. 在flume/conf/目录下添加flume-kafka.conf文件 配置文件如下 2. 启动flume和kafka消费者 3. 传入数据 查看fl…...

SQLite 是什么?

&#x1f4cc; 一、SQLite 是什么&#xff1f; SQLite 是一个轻量级、嵌入式数据库&#xff0c;意思是它直接集成在你的 App 内部&#xff0c;不需要单独安装数据库服务端。 ✅ 特点&#xff1a; 特点说明本地使用所有数据保存在手机内部存储文件形式数据以 .db 文件形式存储…...

两段文本比对,高亮出差异部分

用法一:computed <div class"card" v-if"showFlag"><div class"info">*红色背景为已删除内容&#xff0c;绿色背景为新增内容</div><el-form-item label"与上季度比对&#xff1a;"><div class"comp…...

成熟的前端vue vite websocket,Django后端实现方案包含主动断开websocket连接的实现

可参考实现方式点击进入查看 具体实现方案如下所示&#xff1a; import { useWebsocketMsessageStore } from /stores/websocketMsessageStore.js import {ElMessage} from "element-plus"; import {useUserStore} from "/stores/userStore.js"; // impo…...

2.5 桥梁桥面系及附属结构施工

2.5.1 桥面系施工 1.排水设施 设置纵横坡及泄水孔&#xff0c;减少桥面积水、防排结合。汇水槽、泄水孔顶面高程低于桥面铺装10-15mm。泄水孔边缘设渗水盲沟泄水管下端至少应伸出构筑物底面100-150mm。泄水管通过竖向管道直接引至地面或雨水管线。竖向管道抱箍、卡环、定位卡…...

Markdown格式思维导图——用DeepSeek从PDF内容提取关键信息的有效方法

结构化PDF的思维导图提取方法 当PDF文档结构清晰&#xff0c;包含明确的章节和小节标题时&#xff0c;可以使用以下提示词&#xff1a; 读取上方的PDF&#xff0c;请帮我生成一个结构清晰的思维导图&#xff0c;包含以下内容&#xff1a; 1. 提取PDF中的主要标题作为思维导图…...