ARM Cortex-M4系统控制寄存器:软件复位与时钟门控实战指南
2026/7/22 11:11:19
懒加载(Lazy Loading)是一种性能优化策略:延迟加载非关键资源,直到真正需要时才加载。在 React 应用中,主要指按需加载组件代码,避免将所有 JS 打包到一个文件中,从而减少首屏加载体积、提升页面响应速度和用户体验。
React.lazy+SuspenseReact 提供了原生支持懒加载的两个核心 API:
React.lazyPromise的函数(通常使用import()语法)constLazyComponent=React.lazy(()=>import('./HeavyComponent'));⚠️ 要求被导入的模块使用默认导出(
export default)
Suspensefallback内容(如加载提示)<Suspense fallback={<div>加载中...</div>}> <LazyComponent /> </Suspense>✅ 必须用
Suspense包裹lazy组件,否则会报错
<LazyComponent />时,React.lazy触发import(),发起网络请求加载对应 chunklazy内部会throw 一个 PromiseSuspense捕获该 Promise,暂停子树渲染,显示fallback🔑 核心机制是“抛出 Promise” + “异步边界捕获”,与 DOM 滚动或
Intersection Observer无关
| 场景 | 建议 |
|---|---|
| 路由页面(如 Dashboard、Profile) | ✅ 强烈推荐(配合 React Router) |
| 大型功能模块(图表、富文本编辑器) | ✅ 推荐 |
| 非首屏区域组件(页脚、弹窗) | ✅ 可考虑 |
| 首屏关键内容 | ❌ 禁止懒加载(影响 LCP 和 SEO) |
| 小型 UI 组件(按钮、图标) | ❌ 不值得(增加请求数) |
若希望仅当组件进入视口时才开始加载,可结合Intersection Observer:
import { useInView } from 'react-intersection-observer'; import { lazy, Suspense, useState, useEffect } from 'react'; const ViewportLazy = () => { const [load, setLoad] = useState(false); const { ref, inView } = useInView(); useEffect(() => { if (inView) setLoad(true); }, [inView]); return ( <div ref={ref}> {load ? ( <Suspense fallback="Loading..."> <LazyHeavyComponent /> </Suspense> ) : null} </div> ); };这种方式实现了“视口感知 + 代码分割”的双重优化
dynamic替代ErrorBoundary处理加载失败import()生成独立 chunkconstHome=lazy(()=>import('./pages/Home'));lazy(()=>import(/* webpackChunkName: "chart" */'./Chart'))React.lazy+Suspense是 React 官方推荐的组件级代码分割方案,能有效减小初始 bundle 体积,提升应用性能。它解决的是“何时加载代码”的问题,而非“何时渲染元素”。对于滚动触发的懒加载(如图片),应使用Intersection Observer。两者可结合使用,实现更智能的资源加载策略。
合理运用懒加载,是构建高性能 React 应用的重要一环。
📌提示:在现代构建工具(Vite、Webpack 5+)和框架(Next.js、Remix)中,懒加载已高度自动化,开发者只需关注组件拆分逻辑即可。