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

react代码分割

React 代码分割(Code Splitting)主要是为了 优化首屏加载速度,避免一次性加载整个应用,把代码拆分成多个 bundle,按需加载。常见的方式有三种:


1. 使用 React.lazy + Suspense(推荐方式)

适合组件级别的代码分割。

import React, { Suspense } from "react";// 按需加载组件
const PerformanceReport = React.lazy(() => import("./pages/PerformanceReport"));function App() {return (<div><h1>云鉴性能平台</h1><Suspense fallback={<div>Loading...</div>}><PerformanceReport /></Suspense></div>);
}export default App;
  • React.lazy:实现组件的懒加载

  • Suspense:加载时的兜底 UI(比如 Loading 动画)


2. 路由级别代码分割(React Router)

如果你用 react-router-dom,可以结合 React.lazy 在路由层做代码分割。

import React, { Suspense } from "react";
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";const PerformanceQuery = React.lazy(() => import("./pages/PerformanceQuery"));
const PerformanceReport = React.lazy(() => import("./pages/PerformanceReport"));function AppRouter() {return (<Router><Suspense fallback={<div>页面加载中...</div>}><Routes><Route path="/query" element={<PerformanceQuery />} /><Route path="/report" element={<PerformanceReport />} /></Routes></Suspense></Router>);
}export default AppRouter;

👉 常见做法:

  • 首页加载最少的 bundle

  • 进入对应页面时再动态加载该页面的 JS


3. 动态 import(webpack 原生支持)

适合某些 工具类模块特定场景的函数,避免一开始全量加载。

async function loadExcelExport() {const { exportToExcel } = await import("./utils/excelExport");exportToExcel();
}

4. 更高级的代码分割工具

  • Loadable Components:更灵活的懒加载方案,支持 SSR。

  • Webpack SplitChunksPlugin:拆分公共代码,比如 react, lodash

  • Vite/Rollup:天然支持动态 import,自动分割 bundle。


📌 建议实践:

  1. 路由层做大块分割(每个页面一个 bundle)

  2. 工具函数/图表库按需 import(避免首页加载太大)

  3. 配合 浏览器缓存,重复访问时会更快


http://www.dtcms.com/a/358059.html

相关文章:

  • 对于牛客网—语言学习篇—编程初学者入门训练—复合类型:二维数组较简单题目的解析
  • Redis(自写)
  • LeetCode第438题 - 找到字符串中所有字母异位词
  • C++ 面试高频考点 力扣 34. 在排序数组中查找元素的第一个和最后一个位置 二分查找左右端点 题解 每日一题
  • 为什么vue3会移除过滤器filter
  • JUC并发编程10 - 内存(02) - volatile
  • 生成对抗网络(GAN):深度学习领域的革命性突破
  • DriveDreamer4D
  • YOLOv11 训练参数全解析:一文掌握 epochs、batch、optimizer 调优技巧
  • MySQL-事务(下)-MySQL事务隔离级别与MVCC
  • 检索优化-混合检索
  • 捡捡java——2、基础07
  • 使用git bash ,出现Can‘t get terminal settings: The handle is invalid. 的解决方法与思路
  • 数字人分身系统源码搭建与定制开发:核心技术解析与实践路径
  • 基于 Spring Boot3 的ZKmall开源商城分层架构实践:打造高效可扩展的 Java 电商系统
  • Kubernetes Dashboard 和 Rancher 功能对比以及详细安装步骤
  • MySQL数据库迁移到KingbaseES完整指南
  • 计算机视觉与深度学习 | ORB-SLAM3算法原理与Matlab复现指南
  • WebStorm无法识别@下的文件,但是可以正常使用
  • Redis 缓存热身(Cache Warm-up):原理、方案与实践
  • Linux命令学习:make,make install,modprobe,lsmod
  • CNB刷新EO缓存和插件化
  • Spring Cache实现简化缓存功能开发
  • 2025年职业发展关键证书分析:提升专业能力的路径选择
  • 漏洞挖掘-信息收集教程
  • CVPR深度学习论文创新合集拆解:模型训练速度算提升
  • 【CUDA进阶】MMA分析Bank Conflict与Swizzle(下)
  • 50.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--二期功能规划
  • 基于 MyBatis-Plus 拦截器实现锁定特殊数据(二)
  • CTE 的主要优势_以MySQL为例