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

优化 Web 性能:处理屏幕外图片(Offscreen Images)

在 Web 性能优化中,图片资源的管理是一个关键环节。Google 的 Lighthouse 工具在性能审计中特别关注“延迟加载屏幕外图片”(Defer Offscreen Images),旨在减少不必要的图片加载,从而提升页面加载速度和用户体验。本文将基于 Chrome 开发者文档,深入探讨屏幕外图片的定义、影响及优化方法,助你在2025年的 Web 项目中打造更高效的前端应用。


1. 什么是屏幕外图片?
1.1 定义

屏幕外图片(Offscreen Images)是指在页面初始加载时位于用户视口之外、不立即可见的图片。这些图片通常位于页面底部或需要滚动才能看到的区域。

1.2 为什么需要关注?

默认情况下,浏览器会立即加载页面中的所有 <img> 标签引用的图片,即使它们不在首屏范围内。这会导致:

  • 带宽浪费:下载用户暂时看不到的资源。
  • 加载延迟:延长“首次内容绘制”(FCP)和“最大内容绘制”(LCP)。
1.3 Lighthouse 的检测

Lighthouse 分析页面加载时哪些图片不在视口中,并计算延迟加载它们可以节省的字节数和时间。


2. 屏幕外图片的影响
2.1 性能瓶颈

加载大量屏幕外图片会增加初始页面加载的网络请求数和数据量,尤其在移动设备或低速网络下,影响尤为明显。

2.2 用户体验
  • 用户需要等待更长时间才能看到首屏内容。
  • 不必要的资源加载可能耗尽移动数据流量。
2.3 Lighthouse 得分

报告中的“延迟加载屏幕外图片”项会列出潜在节省的资源大小,直接影响性能得分。


3. 如何识别屏幕外图片?
3.1 使用 Lighthouse
  1. 打开 Chrome 开发者工具(F12)。
  2. 切换到“Lighthouse”选项卡。
  3. 选择“性能”类别,生成报告。
  4. 查看“机会”(Opportunities)下的“延迟加载屏幕外图片”,列出具体图片及其节省字节量。
3.2 手动检查
  • 使用开发者工具的“元素”面板,滚动页面检查 <img> 标签。
  • 在“网络”面板中观察图片加载时间和位置。

4. 优化屏幕外图片的策略
4.1 使用原生延迟加载

HTML5 提供了 loading="lazy" 属性,让浏览器自动延迟加载屏幕外图片:

<img src="image.jpg" loading="lazy" alt="延迟加载图片">
  • 工作原理:浏览器仅在图片接近视口时才加载。
  • 兼容性:Chrome、Firefox 等现代浏览器广泛支持(2025年已全面普及)。
4.2 自定义延迟加载(Intersection Observer)

对于需要更精细控制或兼容旧浏览器的场景,使用 Intersection Observer API:

<img data-src="image.jpg" alt="延迟加载图片" class="lazy">
<script>
    const images = document.querySelectorAll('.lazy');
    const observer = new IntersectionObserver((entries, observer) => {
        entries.forEach(entry => {
            if (entry.isIntersecting) {
                const img = entry.target;
                img.src = img.dataset.src;
                observer.unobserve(img);
            }
        });
    });
    images.forEach(img => observer.observe(img));
</script>
  • 优点:灵活性高,可结合其他逻辑(如预加载)。
  • 回退:为不支持的浏览器提供 polyfill。
4.3 占位符技术

在图片加载前使用低质量占位符(LQIP)或纯色背景:

<img src="placeholder.jpg" data-src="image.jpg" loading="lazy" alt="带占位符的图片">
  • 提升感知性能,用户不会看到空白。
4.4 结合响应式图片

确保延迟加载的图片也适配设备:

<img src="small.jpg"
     srcset="small.jpg 320w, large.jpg 1280w"
     sizes="(max-width: 600px) 100vw, 50vw"
     loading="lazy"
     alt="响应式延迟加载图片">
4.5 构建工具优化

使用现代构建工具(如 Webpack、Vite)自动处理:

  • Webpack:结合 lazyload 插件。
  • Vite:使用 vite-plugin-image-optimizer 添加 loading="lazy"

5. 示例:优化前后对比
优化前
<html>
<body>
    <h1>首屏内容</h1>
    <!-- 以下图片在屏幕外 -->
    <img src="large-image1.jpg" alt="图片1">
    <img src="large-image2.jpg" alt="图片2">
</body>
</html>
  • 页面加载时立即下载所有图片,总计 2MB。
优化后
<html>
<body>
    <h1>首屏内容</h1>
    <img src="large-image1.jpg" loading="lazy" alt="图片1">
    <img src="large-image2.jpg" loading="lazy" alt="图片2">
</body>
</html>
  • 首屏仅加载文本,图片延迟加载,总计初始下载量降至 10KB。
效果
  • FCP 从 3 秒降至 1 秒。
  • 节省带宽 1.99MB。
  • Lighthouse 性能得分提升 10-20 分。

6. 注意事项
  • 关键图片例外:首屏可见图片避免使用 loading="lazy",确保快速显示。
  • SEO 影响:延迟加载不影响搜索引擎抓取,但需确保 alt 属性完善。
  • 测试:在不同网络条件和设备上验证效果。

7. 总结

屏幕外图片的优化是提升 Web 性能的低成本高回报策略。通过原生的 loading="lazy" 或 Intersection Observer,可以轻松实现延迟加载,减少初始加载负担。Lighthouse 的审计为我们指明了优化方向,而本文提供的方案则是实践指南。

相关文章:

  • prism WPF 登录对话框登录成功后显示主界面
  • Objective-C语言的集合
  • Titanic - Machine Learning from Disaster
  • 在航电系统中提高可靠性的嵌入式软件设计
  • Scheme语言的算法
  • OpenVLA-OFT——微调VLA的三大关键设计:并行解码、动作分块、连续动作表示以及L1回归目标
  • 统计学基本原理
  • 基于Android的病虫害防治技术系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 程序化广告行业(58/89):系统架构与广告反作弊深度剖析
  • Java项目之基于ssm的家政公司服务平台(源码+文档)
  • Java面试黄金宝典34
  • FPGA学习(四)——状态机重写LED流水灯并仿真
  • Java 字符串常量池在哪里?
  • Android Dagger 2 框架的注解模块深入剖析 (一)
  • 虚拟地址空间布局架构
  • 八、重学C++—动态多态(运行期)
  • 痉挛性斜颈康复路,饮食要点来相助
  • PyTorch 深度学习实战(34):神经架构搜索(NAS)实战
  • Linux开发工具——vim
  • AIGC8——大模型生态与开源协作:技术竞逐与普惠化浪潮
  • 典型的口碑营销案例/互联网seo是什么意思
  • 网站开发原型 图/win7优化大师好不好
  • 嵊州网站/如何自己建立一个网站
  • 做玉的网站/网站排名怎么搜索靠前
  • 织梦 视频网站源码/常用的关键词挖掘工具有哪些
  • 网站设置了字体为黑体怎么改字体/制作链接的app的软件