React中的懒加载以及在Ice中实践

news2025/1/13 10:23:27

您好,如果喜欢我的文章,可以关注我的公众号「量子前端」,将不定期关注推送前端好文~

前言

对于页面性能优化,组件懒加载是个比较不错的方案,并且在整个项目打包后,如果未做代码分割,构建出的文件体积会非常大,也会出现比较常见的"访问项目某一页面,需要请求整个项目所有页面的资源"问题。

接下来讲一下在React中懒加载我们的组件。

Suspense和Lazy

何时使用lazy函数,比如某个体积相对比较大的第三方库或插件(比如JS版的PDF预览库)只在单页应用(SPA)的某一个不是首页的页面使用了,这种情况就可以考虑代码分割,增加首屏的加载速度。

lazy函数可以单独使用,但是在加载组件时候,页面可能会出现空白,此时需要添加loading,这时就需要Suspense了,代码如下:

const Foo = React.lazy(() => import('../componets/Foo)); 

<Foo />

上面的代码直接在函数中使用Foo组件页面加载时会出现白屏,所以需要Suspense来包裹,代码如下:

const Foo = React.lazy(() => import('../componets/Foo)); 

<React.Suspense fallback={<div>loading...</div>}> 
    <Foo/> 
</React.Suspense>

上述为基本使用,对于在当前页面想要懒加载其他组件的情况可以这样做:

import { Spin } from 'antd';
const OtherComponent = React.lazy(() => import('./OtherComponent'));

function MyComponent() {
  return (
    <div>
      <Suspense fallback={<Spin />}>
        <OtherComponent />
      </Suspense>
    </div>
  );
}

OtherComponent是通过懒加载加载进来的,所以渲染页面的时候可能会有延迟,但使用了Suspense之后,可优化交互。在<OtherComponent />外面使用Suspense标签,并在fallback中声明OtherComponent加载完成前做的事,即可优化整个页面的交互

fallback 属性接受任何在组件加载过程中你想展示的 React 元素。你可以将 Suspense 组件置于懒加载组件之上的任何位置。你甚至可以用一个 Suspense 组件包裹多个懒加载组件。

import { Spin } from 'antd';

const OtherComponent = React.lazy(() => import('./OtherComponent'));
const AnotherComponent = React.lazy(() => import('./AnotherComponent'));

function MyComponent() {
  return (
    <div>
      <Suspense fallback={<Spin />}>
        <section>
          <OtherComponent />
          <AnotherComponent />
        </section>
      </Suspense>
    </div>
  );
}

在Ice.js项目中实践

Ice项目中,如果想要对整个项目中所有页面进行页面级组件懒加载(代码分割),可以这样:

  1. app.tsx中配置fallback,对应Suspense中的fallback
import { Spin } from 'antd';

const appConfig: IAppConfig = {
  app: {
    rootId: 'ice-container',
  },
  router: {
    fallback: <Spin />,
    type: 'browser',
  },
};

runApp(appConfig);
  1. 在路由文件中使用懒加载的形式引入组件:
import { lazy, IRouterConfig } from 'ice';
import Layout from '@/layouts/BasicLayout';

const Home = lazy(() => import('@/pages/Home'));

const routes: IRouterConfig[] = [
  {
    path: '/',
    component: Layout,
    children: [
      {
        path: '/home',
        component: Home,
      },
    ],
  },
];

export default routes;
  1. build.json中配置懒加载模式构建,这样构建出来的产物会有多个javascript文件,实现代码分割:
{
    // ...
    "router": {
      "lazy": true
    }
}

这样,就实现了代码分割的效果啦~如图:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代理ip的优势、用途及注意事项

随着互联网的高速发展&#xff0c;代理ip的名气和地位也随着水涨船高。那么是什么让它们被我们所知悉的呢&#xff1f;下面我们就代理ip的优势、用途和注意事项来分析一下它为什么能迎合着互联网的发展而壮大自己的。 一、优势 每一个脱颖而出的产品必然有它的优势&#xff0c;…

Axure教程—菜单(中继器)

本文将教大家如何用AXURE中的中继器制作菜单&#xff08;自动折叠其他菜单&#xff09; 一、效果介绍 如图&#xff1a; 预览地址&#xff1a;https://iuek50.axshare.com 下载地址&#xff1a;https://download.csdn.net/download/weixin_43516258/87854640?spm1001.2014.30…

知识图谱简介

什么是知识图谱&#xff1f; 参考&#xff1a;知识图谱1、知识图谱2 本质上&#xff0c;知识图谱主要目标是用来描述真实世界中存在的各种实体和概念&#xff0c;以及他们之间的关系&#xff0c;因此可以认为是一种语义网络。 主要作用&#xff1a;通过数据&#xff0c;建立图…

智能自动化助力业务升级:探究低代码开发和业务流程自动化

当我们开始探索业务流程自动化&#xff08;BPA&#xff09;时&#xff0c;就证明我们已经真正进入到企业数字化转型的核心领域了——企业越来越关注如何通过创新技术来提高效率、降低成本并实现业务流程的自动化。在这个背景下&#xff0c;低代码开发平台和业务流程自动化成为了…

vue 滚动加载

在 Vue中&#xff0c;如果一个组件是一个 button&#xff0c;那就可以直接调用 input &#xff08;&#xff09;方法&#xff0c;将组件的 button放入到v-ui中。 然而在v-ui中&#xff0c;一个组件可能不止一个 button&#xff0c;而这些 button还需要从浏览器加载到 DOM树中。…

一个投喂ChatGPT大内容的小技巧

大家好&#xff0c;我是五竹。心血来潮整理了一份手册&#xff1a;《ChatGPT学习指南》并且将为小白们持续更新和GPT相关的资源和教程&#xff0c;专注于打造一部最好的GPT入门指南&#xff0c;欢迎大家转发、收藏、点赞支持&#xff01;谨防失联&#xff01; 至今还有很多人都…

渗透测试适合小白学习吗会让人感觉到无聊吗?

渗透测试是一项复杂的技能&#xff0c;需要具备扎实的计算机知识&#xff0c;对网络和系统安全有深入的理解和认识。对于初学者来说&#xff0c;建议先学习计算机网络、操作系统、编程语言等相关基础知识&#xff0c;了解渗透测试的概念、流程和常用工具。同时&#xff0c;需要…

HMR API及其原理

很久之前&#xff0c;遇到一个面试题&#xff1a;【在代码变更之后&#xff0c;如何实时看到更新后的页面效果呢&#xff1f;】 在传统的方案中&#xff0c;我们可以通过 live reload 也就是自动刷新页面的方式来解决的&#xff0c;不过随着前端工程的日益庞大&#xff0c;开发…

CSS3+HTML5

1、HTML5 2、HTML5标签 链接标签 <a href"https://www.baidu.com">打开百度&#xff0c;你就知道&#xff01;</a> 链接的属性与作用 属性1&#xff1a;href 作用&#xff1a;用于指定链接目标的url地址&#xff0c;当为标签应用href属性时…

(2022,DynamicD)使用动态鉴别器改进 GAN

Improving GANs with A Dynamic Discriminator 公众号&#xff1a;EDPJ 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.1 基础 3.2 动态鉴别器 3.3 针对不同数据体系的两种方案 4. 实验 4.1 设置 4.2 实证研究 4.3 与现有方法的比较 4.4 DynamicD 的泛化性和兼…

如何从底层优化memmove

如何从底层优化memmove 先实现memmove: 如果没有重叠&#xff0c;可以按任何方向拷贝如果有重叠&#xff0c;先拷贝重叠位置&#xff0c;再考虑是前重叠还是后重叠 优化策略&#xff1a; 拷贝数据的时候应该根据寄存器的大小来设计拷贝单位&#xff0c;注意数据区域可能不是…

怎么快速搭建Vue+Vite项目?

快速搭建VueVite项目的步骤如下&#xff1a; 1.随便创建一个文件夹&#xff0c;用来放项目。我这里创建的文件夹名称是my-vite。 2.在当前目录的路径显示框输入cmd,快速打开cmd命令窗口 3.输入以下命令查询电脑是否已经安装了node.js&#xff0c;此时需注意node版本需要&g…

Nginx的讲解

Nginx的讲解 关于Nginx编译安装Nginx服务1.关闭防火墙&#xff0c;将安装nginx所需软件包传到/opt目录下2.安装依赖包3.创建运用用户、组4.编译安装Nginx5、检查、启动、重启、停止 nginx服务6.添加 Nginx系统服务 Nginx服务的主配置文件 nginx.conf1.全局配置2.I/O 事件配置3.…

【笔试强训编程题】Day3.(字符串中找出连续最长的数字串 69385)和(数组中出现次数超过一半的数字 23271)

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训编程题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;! 文章目录…

【shiro】shiro整合JWT——3.执行流程

前言 shiro整合JWT系列&#xff0c;主要记录核心思路–如何在shiroredis整合JWTToken。 上一篇中&#xff0c;主要讲如何在shiro框架中配置Jwt&#xff0c;以及token执行的流程。 该篇主要梳理整个代码的执行流程。 ps&#xff1a;本文主要以记录核心思路为主&#xff0c;以下…

JavaWeb14(ajax02判断账号是否存在JSON介绍AJAX+JSON字符串和对象之间的转换JSON实现自动补全)

目录 一.AJAX实现即时检查用户名是否存在 1.1 效果预览 1.2 代码实现 ①html代码 ②ajax请求 ③底层代码 2.JSON概述. 2.1何为JSON. 2.2为什么需要JSON. 2.3JSON格式介绍. 2.3.1JSON对象格式. 2.3.2JSON数组格式. 2.3.3JSON对象数组格式. 3.JSON字符串的解析. 3.1…

springboot启动过程原理分析

前言 现在绝大多数java项目都上了Springboot框架, 因此深入理解Springboot框架的运行原理,能帮助我们更好的在Springboot框架下进行业务开发,同时能学习框架中优秀的设计思想, 本文主要是通过对Springboot源码的分析, 来理解整个springboot项目的启动流程. 因为Springboot不同…

Spring:Spring框架_事务传播和隔离级别 ④

一、事务和四大特性 事务&#xff1a;指数据库的一个执行操作单元 事务的四个特性&#xff08;ACID&#xff09; 1.1 原子性 原子性&#xff08;Atomicity&#xff09;&#xff1a;操作这些指令时&#xff0c;要么全部执行成功&#xff0c;要么全部不执行。只要…

JUC 学习笔记

JUC 学习笔记 本文为笔者对 JUC 的学习记录&#xff0c;主要参考了尚硅谷的 JUC 教程 文章目录 JUC 学习笔记1. JUC 概述什么是 JUC&#xff1f;线程和进程&#xff1a;进程的状态&#xff1a;wait 和 sleep&#xff1a;并发和并行&#xff1a;管程&#xff1a;用户线程和守护…

Python numpy - 数组的向量化运算

目录 一 函数numpy.where 二 数组统计方法 1 基础数组统计方法 2 布尔值数组的方法 三 排序 1 函数sort 2 函数np.unique 向量化&#xff1a;利用数组表达式来替代显式循环的方法 一 函数numpy.where 条件逻辑函数 where(condition, x, y) condition为条件,当满足条件…