讲师中心 微信公众号
AI工具推荐 视频效率加速

JavaScript如何实现懒加载_性能优化你考虑了吗

夏辰大大_5280

夏辰大大_5280

发布时间:2025-12-30 20:05:17

|

774人浏览过

|

来源于php中文网

原创

懒加载核心是按需触发资源加载,推荐用IntersectionObserver替代scroll监听,配合loading="lazy"实现渐进增强,组件懒加载需结合代码分割与视口观察,且必须处理失败fallback。

javascript如何实现懒加载_性能优化你考虑了吗

懒加载不是加个 loading 动画就叫懒加载,核心是「按需触发资源加载」——图片、组件、模块,只要没进入视口或没被调用,就不该发起请求或执行初始化。

IntersectionObserver 是现代懒加载的首选方案

它比监听 scroll 事件更轻量、更精准,浏览器原生支持,且能自动处理节流、相交阈值、根容器偏移等细节。不推荐手动实现 getBoundingClientRect() + scroll 组合,容易卡顿、漏判、兼容性差。

使用时注意:

  • root 默认是浏览器视口;若懒加载在滚动容器(如 div)内,需显式传入该容器节点
  • threshold 设为 [0, 0.1] 比单个 0 更稳妥,避免因像素级误差导致首次相交未触发
  • 观察器实例应复用,不要每个元素都新建一个 IntersectionObserver
const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src;
      observer.unobserve(img); // 加载后停止观察
    }
  });
}, { threshold: [0, 0.1] });

document.querySelectorAll('img[data-src]').forEach(img => observer.observe(img));

图片懒加载必须配合 loading="lazy" 属性

这是浏览器原生懒加载能力,无需 JS 即可生效,且对 SEO 友好。但它的行为有明确限制:

立即学习Java免费学习笔记(深入)”;

  • 仅对 <img><iframe> 生效
  • 只在标准文档流中起作用(position: absolutedisplay: none 的元素可能被跳过)
  • 不支持自定义阈值或回调,纯靠浏览器策略决定何时加载

建议采用「渐进增强」策略:loading="lazy" 作为基础层,JS 的 IntersectionObserver 作为增强层(比如要支持 WebP 切换、错误降级、统计上报)。

Revealjs Presentations
Revealjs Presentations

创建、编辑并部署 reveal.js 演示文稿为单个 HTML 文件,可选自定义 CSS。适用于需要制作演示文稿、幻灯片或宣传材料时使用。

下载

React/Vue 组件级懒加载别只依赖 React.lazydefineAsyncComponent

它们解决的是代码分割(code-splitting),不是渲染时机控制。组件即使异步加载完成,仍可能立即挂载并执行副作用(如发请求、初始化 canvas),造成无意义的资源消耗。

真正有效的组件懒加载需要两层控制:

  • React.lazy / defineAsyncComponent 拆分 chunk
  • 结合 useEffect + IntersectionObserver(或 useInView)延迟内部逻辑执行

例如:一个图表组件,import() 加载完 ECharts 后,仍应等待其进入视口再调用 echarts.init()setOption()

懒加载失败时的 fallback 容易被忽略

网络中断、CDN 故障、路径错误都会让懒加载资源加载失败。此时若不处理,页面可能出现空白、错位或报错中断后续逻辑。

关键动作:

  • <img> 设置 onerror 回调,回退到占位图或文字提示
  • 对 JS 动态 import()try/catch,并提供降级 UI(如「功能暂不可用」按钮)
  • 避免静默失败 —— 至少记录一次 console.warn 或上报监控

性能优化不是“加了懒加载就万事大吉”,而是持续判断“此刻是否真需要这个资源”。很多页面把首屏外的轮播图、底部推荐、隐藏 Tab 里的图表全都设成懒加载,却忘了它们可能永远不被用户点开 —— 那些 unobserve 之后的清理、错误兜底、以及是否值得拆 chunk,才是决定懒加载是否真正生效的关键。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
ECharts是什么
ECharts是什么

ECharts是基于JavaScript的开源可视化库,能够帮助开发者轻松地实现各种复杂的数据可视化效果,提供了丰富的图表类型和交互功能。本专题为大家提供ECharts是什么的相关的文章、下载、课程内容,供大家免费下载体验。

712

2023.08.04

echarts自适应大小设置
echarts自适应大小设置

使用ECharts的自适应大小设置可以使图表能够根据不同屏幕尺寸和设备进行自适应。一种是使用resize事件,在图表容器大小改变时重新渲染图表;另一种是使用CSS样式,通过设置图表容器的宽度和高度为百分比值,使图表容器根据父元素的大小进行自适应。根据实际需求选择合适的方法,可以使图表在不同设备上都能够良好地显示和交互 。

3665

2023.09.13

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

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

3696

2023.06.20

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

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

1175

2023.07.28

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

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

1498

2023.08.03

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

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

9123

2023.08.17

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

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

820

2023.09.01

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

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

2164

2023.09.04

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

160

2026.09.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 16.6万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.4万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn