React.lazy() 懒加载

概要

React.lazy() 是 React 16.6 引入的一个功能,用于实现代码分割(code splitting)。它允许你懒加载组件,即在需要时才加载组件,而不是在应用初始加载时就加载所有组件。这种方法可以显著提高应用的性能,尤其是在大型应用中。

基本用法

React.lazy() 仅接受一个函数,该函数必须返回一个动态引入的模块(使用 import()

  • 懒加载组件

假设你有一个名为 MyComponent.js 的组件,你可以这样使用 React.lazy()

import React, { Suspense, lazy } from 'react';// 使用 React.lazy() 懒加载组件
const MyComponent = lazy(() => import('./MyComponent'));const App = () => {return (<div><h1>我的应用</h1><Suspense fallback={<div>加载中...</div>}><MyComponent /></Suspense></div>);
};export default App;
  • 使用Suspense 

 懒加载组件时,必须使用 Suspense 组件来包裹懒加载的组件。Suspense 组件允许你定义一个 fallback 属性,这个属性是组件在加载过程中显示的内容。例如,可以显示一个加载指示器。

例如:如果不使用Suspense包裹组件,有可能遇到这种报错信息:

A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition.

这个错误提示是因为在处理用户输入(如点击、键盘输入等)时,某个懒加载的组件(使用 React.lazy())被挂起了(suspended),导致 React 需要显示一个加载指示器。而这种情况通常是由于 React 在渲染期间遇到了懒加载组件,但该组件尚未加载完成。(通俗的说,是React使用了lazy之后,会存在一个加载中的空档期,React不知道在这个空档期中该显示什么内容,所以需要我们指定,所以就要使用到Suspense

  • 动态导入

使用动态导入(如 import() 语法)来实现代码分割,使得开发者可以在应用的不同部分按需加载模块,提高了代码的组织性和可维护性

原理解释

代码分割 — 优化 Web 应用性能的一种技术,主要目的是将大型应用程序的 JavaScript 代码拆分成更小的、按需加载的块。

为什么要代码分割?

现在前端项目基本都采用打包技术,比如 Webpack,JS逻辑代码打包后会产生一个 bundle.js 文件,而随着我们引用的第三方库越来越多或业务逻辑代码越来越复杂,相应打包好的 bundle.js 文件体积就会越来越大,因为需要先请求加载资源之后,才会渲染页面,这就会严重影响到页面的首屏加载。

1. 提高加载性能
  • 初始加载时间:当用户首次访问一个大型应用时,加载所有的 JavaScript 文件可能会导致较长的加载时间。通过代码分割,应用只会加载必要的代码,从而减少初始加载的体积。

  • 按需加载:代码分割允许应用在需要时才加载特定的代码块,比如当用户导航到某个特定的页面或触发特定的操作时。这种方式可以显著提高用户体验。

2. 资源优化
  • 减少资源浪费:在大型应用中,用户可能并不会访问所有的功能。通过代码分割,只加载用户实际需要的代码,可以减少不必要的资源消耗和带宽使用。

  • 缓存优化:将代码分割成多个小块也有助于利用浏览器的缓存机制。如果某个小块的代码发生变化,只有该块需要重新加载,而其他未改变的代码块可以继续使用缓存。

3. 更好的用户体验
  • 流畅的导航:通过懒加载(Lazy Loading)技术,可以实现更流畅的导航体验。当用户需要某个页面时,相关的代码可以在后台加载,减少等待时间。

  • 避免闪烁:当用户在应用中进行操作时,代码分割可以确保在加载新内容时不会出现大的延迟,从而增强用户体验。

什么时候应该考虑代码分割?

1. 大型应用
  • 复杂性:如果你的应用功能复杂、组件数量多,或者页面之间的依赖关系复杂,代码分割可以显著改善加载性能。大型应用通常会受益于将代码拆分成更小的块,只在需要时加载。
2. 首次加载时间过长
  • 用户体验:如果用户在首次访问应用时需要等待较长时间才能看到任何内容,那么应该考虑代码分割。通过只加载必要的代码,减少初始加载时间,可以提高用户体验。
3. 使用路由
  • 页面导航:如果你的应用使用了客户端路由(例如 React Router),可以考虑在用户导航到新页面时懒加载相关的页面组件。这种方式可以确保用户只加载他们正在访问的内容。
4. 资源优化
  • 带宽和性能:如果你的应用用户分布在不同的网络环境中,代码分割可以帮助优化资源使用,减少不必要的带宽消耗,尤其是在移动设备上。
5. 特定功能模块
  • 懒加载特性:如果你的应用有某些功能模块并不是所有用户都会使用(例如设置、报告、帮助等),可以将这些模块懒加载,以减少初始加载的负担。
6. 动态内容
  • 根据用户交互加载:如果你的应用的某些部分依赖于用户的交互(例如点击按钮、选择选项等),可以在用户触发这些交互时动态加载相关的代码。
7. 现代前端框架支持
  • 利用框架功能:许多现代前端框架(如 React、Vue、Angular 等)都提供了原生的代码分割和懒加载支持。如果你正在使用这些框架,应该考虑利用它们的功能来实现代码分割。
8. 提高开发效率
  • 团队协作:如果你的团队较大并且在开发大型应用,代码分割可以让不同的团队成员专注于各自的模块,而不必担心整体构建的复杂性。
9. 优化性能监测
  • 分析工具:如果你使用性能监测工具(如 Google Lighthouse 或 Web Vitals)监控应用的加载性能,并发现其评分较低,代码分割可能是一个有效的优化方案

注意:使用React.lazy() 后,组件会被 懒加载,并且会被 打包成一个独立的 chunk(即一个单独的 JavaScript 文件)。这样,只有在该组件被需要时,它才会被异步加载到浏览器中,从而减少初始页面的加载时间和资源消耗。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/467091.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

帮你快速理解并巧记设计模式

经常因为记不住或不能理解设计模式而苦恼的童鞋们注意了&#xff0c;闲暇之余总结了常用的22中设计模式&#xff0c;并一一举例&#xff0c;帮助大家快速理解、牢记&#xff0c;如有不对的地方&#xff0c;欢迎大家指正哈 创建型模式 单例模式&#xff08;Singleton Pattern&…

甘肃高校大数据实验室建设案例分享

随着信息技术的快速发展&#xff0c;大数据技术已成为推动经济社会发展的重要引擎。甘肃省高度重视教育信息化建设&#xff0c;并积极支持省内高校建立大数据相关实验室&#xff0c;以促进学科交叉融合及创新人才培养。在此背景下&#xff0c;泰迪携手多所甘肃高校共同打造了一…

成都睿明智科技有限公司共赴抖音电商蓝海

在这个短视频风起云涌的时代&#xff0c;抖音作为现象级的社交媒体平台&#xff0c;不仅改变了人们的娱乐方式&#xff0c;更悄然间重塑了电商行业的格局。在这片充满机遇与挑战的蓝海中&#xff0c;成都睿明智科技有限公司凭借其敏锐的市场洞察力和专业的服务能力&#xff0c;…

【前端】JavaScript 方法速查大全-对象(二)

&#x1f525; 前言 在现代Web开发中&#xff0c;JavaScript已经成为不可或缺的编程语言。无论是前端开发还是后端服务&#xff0c;JavaScript都扮演着重要角色。为了帮助开发者更高效地使用JavaScript&#xff0c;本文将为您提供一个全面、系统的JavaScript方法参考&#xff…

右旋圆极化散射后的stocks矢量 与T3矩阵的关系

T3矩阵如下 斯托克斯与T3的关系如下。 斯托克斯与T3均没有平均处理&#xff0c;即斯托克斯是完全极化波的&#xff08;一种琼斯矢量得到&#xff09;&#xff0c;T3是由一个散射矩阵得到&#xff0c;只有一个特征值。

电子电气架构 -- 智能汽车电子电气架构开发关键技术

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。…

Windows下mysql数据库备份策略

Windows下mysql的增量备份和全量备份&#xff0c;并利用schtasks设置定时任务执行bat脚本。 一、备份要求 序号 备份类型 备份频次 备份时间 1 增量备份 每周一-每周六各一次 18:00:00 2 全量备份 每周日一次 18:00:00 二、备份方法 2.1增量备份 2.1.1准备工作…

使用CentOS宝塔面板docker搭建EasyTier内网穿透服务

0. 前言 EasyTier是一个简单、安全、去中心化的内网穿透 VPN 组网方案&#xff0c;部署方便&#xff0c;支持 MacOS/Linux/Windows/FreeBSD/Android平台&#xff0c;而且作者搭建了一个公共服务器&#xff0c;不想折腾自建服务&#xff0c;可以使用默认的公共服务器地址 tcp:/…

Moment.js、Day.js、Miment,日期时间库怎么选?

一直以来&#xff0c;处理时间和日期的JavaScript库&#xff0c;选用的都是Momment.js。它的API清晰简单&#xff0c;使用方便灵巧&#xff0c;功能还特别齐全。 大师兄是Moment.js的重度使用者。凡是遇到时间和日期的操作&#xff0c;就把Moment.js引用上。 直到有天我发现加…

AOSP去特征|AOSP导入android-studio|AOSP导入clion

什么是AOSP 开源性&#xff1a;AOSP的源代码公开&#xff0c;任何人都可以获取和修改&#xff0c;适合想要开发或自定义安卓系统的开发者。 灵活性&#xff1a;AOSP提供了基本的安卓功能&#xff0c;制造商可以基于AOSP开发出自己的定制系统&#xff08;如三星的One UI、小米的…

JavaScript 网页设计详解教程

JavaScript 网页设计详解教程 引言 JavaScript 是一种广泛使用的编程语言&#xff0c;主要用于网页开发。它使得网页具有动态交互性&#xff0c;能够响应用户的操作。随着前端开发的不断发展&#xff0c;JavaScript 已成为现代网页设计中不可或缺的一部分。本文将详细介绍 Ja…

Android关机流程知多少?

在 Android 中&#xff0c;关机流程涉及系统各个组件的协同工作&#xff0c;确保设备在断电之前能够安全地关闭所有活动并保存数据。以下是 Android 系统中关机流程的详细介绍&#xff1a; 1. 用户触发关机请求 关机流程由用户的操作触发&#xff0c;通常有以下几种方式&#…

【Mac】PD报错:无法为“Windows” 完成操作,虚拟机ID无效的解决办法

Parallels Desktop是Mac上一款非常常用的虚拟机软件&#xff0c;但是在使用过程中&#xff0c;可能会遇到一些问题不知道如何处理。比如有时会遇到PD报错&#xff1a;无法为“Windows 11”完成操作&#xff0c;虚拟机ID无效。 错误原因 电脑上安装过虚拟机&#xff0c;虚拟机被…

51c大模型~合集17

我自己的原文哦~ https://blog.51cto.com/whaosoft/11599989 #关于大模型「越狱」的多种方式 此项目是由伊利诺伊大学香槟分校&#xff08;UIUC&#xff09;的汪浩瀚教授主导&#xff0c;汇集了多名intern的共同努力而成。长久以来&#xff0c;这个跨学科的团队一直在前沿科…

一:时序数据库-Influx应用

目录 0、版本号 1、登录页面 2、账号基本信息 3、数据库案例 4、可视化 5、java案例 0、版本号 InfluxDB v2.4.0 1、登录页面 http://127.0.0.1:8086/signin 账号&#xff1a;自己账号 密码&#xff1a;自己密码 2、账号基本信息 查看用户id和组织id&#xff01;&…

Uefi Application小游戏开发之贪吃蛇

这段代码是一个 UEFI 应用程序&#xff0c;它实现了一个简单的贪吃蛇游戏。 #include <Uefi.h> #include <Library/UefiLib.h> #include <Library/ShellCEntryLib.h> #include <Library/UefiBootServicesTableLib.h> #include <Library/UefiRuntim…

C++设计模式结构型模式———组合模式

文章目录 一、引言二、组合模式三、总结 一、引言 组合模式是一种结构型设计模式&#xff0c; 可以使用它将对象组合成树状结构&#xff0c; 并且能像使用独立对象一样使用它们。代码实现中涉及了递归调用。组合模式与传统上的“类与类之间的组合关系”没有关联&#xff0c;不…

『大模型笔记』IBM技术团队:什么是智能体型RAG!

『大模型笔记』IBM技术团队:什么是智能体型RAG! 文章目录 一. 『大模型笔记』IBM技术团队:什么是智能体型RAG!二. 参考文献一. 『大模型笔记』IBM技术团队:什么是智能体型RAG! ✅检索增强生成(RAG)是一种结合检索和生成能力的技术,通过从向量数据库检索相关信息作为上…

快速傅里叶变换(FFT)基础(附python实现)

对于非专业人士&#xff0c;傅里叶变换一直是一个神秘的武器&#xff0c;它可以分析出不同频域的信息&#xff0c;从时域转换到频域&#xff0c;揭示了信号的频率成分&#xff0c;对于数字信号处理&#xff08;DSP&#xff09;、图像、语音等数据来说&#xff0c;傅里叶变换是最…

丹摩征文活动|新手入门指南

在AI大模型发展的今天&#xff0c;高性能计算平台已经成为研究和应用领域中不可或缺的工具。丹摩智算平台专注于为用户提供强大的算力支持和便捷的操作流程&#xff0c;帮助研究者和开发者更高效地训练和优化AI模型。本教程将深入介绍丹摩智算平台的核心功能及具体操作步骤&…