0

0

JS如何实现图片懒加载优化 3种图片懒加载方案提升网页加载速度

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-06-27 19:55:01

|

1017人浏览过

|

来源于php中文网

原创

图片懒加载通过延迟加载非首屏图片提升页面性能。具体方案有三种:1.基于scroll事件监听,通过判断图片是否进入视窗加载图片,但需优化触发频率;2.使用intersection observer api实现异步监听,性能更优;3.使用loading="lazy"属性原生支持。此外,占位图应与实际图片尺寸一致并采用低质量图片或css渐变设计。加载失败时应显示默认图、支持重试及错误提示,并监控上报错误。对seo影响方面,应确保搜索引擎可抓取图片,合理使用alt属性并配合cdn加速。

JS如何实现图片懒加载优化 3种图片懒加载方案提升网页加载速度

图片懒加载,简单来说,就是先不加载那些不在用户当前视窗内的图片,等到它们快要进入视窗时再加载。这样做可以大幅减少页面初始加载时的HTTP请求数量,加快页面渲染速度,提升用户体验。

JS如何实现图片懒加载优化 3种图片懒加载方案提升网页加载速度

解决方案

JS如何实现图片懒加载优化 3种图片懒加载方案提升网页加载速度

实现图片懒加载的核心思路就是:延迟加载。具体来说,就是先把JS如何实现图片懒加载优化 3种图片懒加载方案提升网页加载速度标签的src属性设置为空,然后将真实的图片地址放到一个自定义属性中,比如data-src。当页面滚动时,通过JavaScript判断图片是否进入视窗,如果进入,就把data-src的值赋给src,这样图片就开始加载了。

这里提供三种常用的实现方案:

JS如何实现图片懒加载优化 3种图片懒加载方案提升网页加载速度
  1. 基于scroll事件监听

    这是最传统的做法。监听windowscroll事件,每次滚动时都检查是否有图片进入视窗。

    const images = document.querySelectorAll('img[data-src]');
    
    function lazyLoad() {
      images.forEach(img => {
        if (isInViewport(img) && img.dataset.src) {
          img.src = img.dataset.src;
          img.removeAttribute('data-src'); // 防止重复加载
        }
      });
    }
    
    function isInViewport(element) {
      const rect = element.getBoundingClientRect();
      return (
        rect.top >= 0 &&
        rect.left >= 0 &&
        rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
        rect.right <= (window.innerWidth || document.documentElement.clientWidth)
      );
    }
    
    // 页面加载完成时执行一次,防止首屏图片未加载
    lazyLoad();
    
    window.addEventListener('scroll', lazyLoad);
    window.addEventListener('resize', lazyLoad); // 监听resize事件,防止窗口大小变化导致图片显示问题

    这种方案的缺点是scroll事件触发频率很高,如果页面图片很多,会频繁执行lazyLoad函数,可能导致性能问题。可以考虑使用throttledebounce来优化。

  2. 使用Intersection Observer API

    这是更现代、更高效的方案。Intersection Observer可以监听元素是否进入视窗,而且是异步的,不会阻塞主线程。

    const images = document.querySelectorAll('img[data-src]');
    
    const observer = new IntersectionObserver((entries) => {
      entries.forEach(entry => {
        if (entry.isIntersecting) {
          const img = entry.target;
          img.src = img.dataset.src;
          img.removeAttribute('data-src');
          observer.unobserve(img); // 加载完成后停止观察
        }
      });
    });
    
    images.forEach(img => {
      observer.observe(img);
    });

    这种方案的优点是性能更好,而且代码更简洁。

  3. 配合loading="lazy"属性

    现代浏览器已经原生支持loading="lazy"属性,可以直接在JS如何实现图片懒加载优化 3种图片懒加载方案提升网页加载速度标签上使用,无需编写任何JavaScript代码。

    @@##@@

    这种方案最简单,但兼容性可能存在问题,需要根据实际情况选择。

    illostrationAI
    illostrationAI

    AI插画生成,lowpoly、3D、矢量、logo、像素风、皮克斯等风格

    下载

副标题1

图片懒加载的占位图应该如何设计?

占位图的作用是在图片加载完成之前,先显示一个临时的图片,防止页面出现空白。占位图的设计直接影响用户体验。

  • 颜色和尺寸: 占位图的颜色应该与页面背景色相近,尺寸应该与实际图片一致,避免页面布局发生跳动。
  • 使用低质量图片: 可以使用实际图片的低质量版本作为占位图,这样用户至少可以看到图片的轮廓。
  • 使用SVG占位符: 使用SVG可以创建简单的矢量图形作为占位符,体积小,不会影响页面加载速度。
  • 使用CSS渐变: 使用CSS渐变可以创建平滑的颜色过渡效果,作为占位图,视觉效果更好。

选择哪种方案取决于具体的需求和设计风格。

副标题2

如何处理懒加载图片加载失败的情况?

图片加载失败是很常见的问题,必须妥善处理,否则会影响用户体验。

  • 显示默认图片: 可以设置一个默认图片,当图片加载失败时,显示这个默认图片。
  • 重试加载: 可以尝试重新加载图片,但要避免无限循环加载。可以设置一个最大重试次数。
  • 显示错误信息: 可以显示错误信息,提示用户图片加载失败。
  • 监控错误: 使用onerror事件监听图片加载错误,并上报到监控系统,方便排查问题。

错误处理是保证用户体验的重要环节,不可忽视。

副标题3

懒加载对SEO有什么影响?如何优化?

懒加载虽然可以提升用户体验,但也可能对SEO产生负面影响。如果搜索引擎无法抓取到懒加载的图片,可能会影响网站的排名。

  • 确保搜索引擎可以抓取图片: 确保搜索引擎可以执行JavaScript代码,或者提供noscript标签,包含图片的真实地址。
  • 使用loading="lazy"属性: 搜索引擎通常可以识别loading="lazy"属性,并正确抓取图片。
  • 优化图片大小: 优化图片大小可以减少加载时间,提升SEO效果。
  • 使用CDN: 使用CDN可以加速图片加载速度,提升SEO效果。
  • 使用正确的alt属性: 为图片添加正确的alt属性,方便搜索引擎理解图片内容。

总而言之,懒加载需要谨慎使用,并进行适当的优化,才能保证SEO效果。

Image

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

502

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

502

2023.08.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

512

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

244

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5306

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

481

2023.09.01

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
前端开发(基础+实战项目合集)
前端开发(基础+实战项目合集)

共60课时 | 3.9万人学习

第十九期_前端开发
第十九期_前端开发

共111课时 | 14.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号