前端组件库 ——Arco Design React 知识点大全(四)

简介: 教程来源 https://www.wkmsa.cn/ Arco Design性能优化指南:涵盖按需引入(组件/图标)、路由懒加载、虚拟滚动表格、Tree Shaking、React.memo及useMemo/useCallback缓存、Profiler性能监控等8大核心策略,显著减小包体积、提升渲染与加载性能。

六、性能优化

6.1 按需引入详解
按需引入是 Arco Design 性能优化的核心手段,可以从打包体积中移除未使用的组件代码。

通过 babel-plugin-import 实现自动按需引入

npm install babel-plugin-import -D
// babel.config.js
module.exports = {
  plugins: [
    ['import', {
      libraryName: '@arco-design/web-react',
      libraryDirectory: 'es',
      camel2DashComponentName: false,
      style: true,   // 自动加载样式
    }],
  ],
};

配置完成后,编写代码时只需:

import { Button, Input, Table } from '@arco-design/web-react';
// 插件会自动转换为:
// import Button from '@arco-design/web-react/es/button';
// import '@arco-design/web-react/es/button/style';
// import Input from '@arco-design/web-react/es/input';
// ...

从实际项目中验证优化效果
image.png
手动按需引入

如果不使用 babel 插件,也可以手动按需引入:

// ✅ 手动按需引入
import Button from '@arco-design/web-react/es/button';
import '@arco-design/web-react/es/button/style';

import Input from '@arco-design/web-react/es/input';
import '@arco-design/web-react/es/input/style';

6.2 图标按需引入优化
Arco Design 提供了独立的图标包 @arco-design/web-react/icon,包含超过 2000 个图标。全量引入图标库会显著增加打包体积。

// ❌ 错误:会引入所有图标
import * as Icons from '@arco-design/web-react/icon';

// ✅ 正确:只引入需要的图标
import { IconHome, IconUser, IconSettings } from '@arco-design/web-react/icon';

图标按需引入的打包效果对比:
image.png
使用动态图标的场景优化

当图标名称是动态的时,可以使用图标映射表:

// 预定义图标映射表
const iconMap = {
  home: IconHome,
  user: IconUser,
  settings: IconSettings,
  delete: IconDelete,
};

// 动态获取图标组件
const getIcon = (iconName) => {
  return iconMap[iconName] || IconDefault;
};

// 使用
const DynamicIcon = getIcon('home');
<DynamicIcon />

6.3 路由懒加载与代码分割
结合 React Router 可以实现组件级别的懒加载:

import { lazy, Suspense } from 'react';
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import { Spin } from '@arco-design/web-react';

// 懒加载页面组件
const Dashboard = lazy(() => import('./pages/Dashboard'));
const UserList = lazy(() => import('./pages/UserList'));
const OrderList = lazy(() => import('./pages/OrderList'));
const Settings = lazy(() => import('./pages/Settings'));

function App() {
  return (
    <BrowserRouter>
      <Suspense fallback={<Spin tip="加载中..." style={
  { marginTop: 100 }} />}>
        <Routes>
          <Route path="/" element={<Dashboard />} />
          <Route path="/users" element={<UserList />} />
          <Route path="/orders" element={<OrderList />} />
          <Route path="/settings" element={<Settings />} />
        </Routes>
      </Suspense>
    </BrowserRouter>
  );
}

使用 Webpack 魔法注释自定义 chunk 名称:

const Dashboard = lazy(() => import(/* webpackChunkName: "dashboard" */ './pages/Dashboard'));
const UserList = lazy(() => import(/* webpackChunkName: "users" */ './pages/UserList'));

6.4 表格组件性能优化
对于大数据量表格,Arco Design 的 Table 组件提供了虚拟滚动(Virtual Scroll)功能,可以显著提升渲染性能。

import { Table } from '@arco-design/web-react';

// 生成大量测试数据
const generateLargeData = () => {
  const data = [];
  for (let i = 0; i < 10000; i++) {
    data.push({
      key: i,
      name: `用户 ${i}`,
      age: 20 + (i % 50),
      address: `地址 ${i}`,
      email: `user${i}@example.com`,
    });
  }
  return data;
};

const columns = [
  { title: '姓名', dataIndex: 'name', width: 120, fixed: 'left' },
  { title: '年龄', dataIndex: 'age', width: 80 },
  { title: '地址', dataIndex: 'address', width: 200 },
  { title: '邮箱', dataIndex: 'email', width: 200, fixed: 'right' },
];

const VirtualTableDemo = () => {
  const data = generateLargeData();

  return (
    <Table
      columns={columns}
      data={data}
      virtualized
      scroll={
  { y: 500, x: 800 }}
      pagination={false}
      border
    />
  );
};

虚拟滚动的性能优势:
image.png
6.5 Tree Shaking 优化原理
Arco Design 使用 ES Modules 格式导出,支持 Webpack、Rollup、Vite 等构建工具的 Tree Shaking。确保以下几点以获得最佳优化效果:
使用 ES Module 引入方式:

// ✅ 好的做法
import { Button } from '@arco-design/web-react';

// ❌ 不好的做法(会阻止 Tree Shaking)
import Arco from '@arco-design/web-react';
const { Button } = Arco;

确保 sideEffects 配置正确:

// package.json 中确保 sideEffects 配置包含样式文件
{
  "sideEffects": [
    "*.css",
    "*.less"
  ]
}

使用 Webpack Bundle Analyzer 分析打包结果:

npm install webpack-bundle-analyzer -D
// webpack.config.js
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

module.exports = {
  plugins: [
    new BundleAnalyzerPlugin(),
  ],
};

6.6 使用 React.memo 减少不必要的重渲染
对于频繁渲染的组件,使用 React.memo 可以避免不必要的重渲染:

import { memo } from 'react';
import { Card, Button } from '@arco-design/web-react';

const UserCard = memo(({ user, onEdit }) => {
  console.log('UserCard rendered:', user.id);
  return (
    <Card>
      <div>姓名:{user.name}</div>
      <div>年龄:{user.age}</div>
      <Button onClick={() => onEdit(user.id)}>编辑</Button>
    </Card>
  );
});

6.7 使用 useMemo / useCallback 缓存计算结果

import { useMemo, useCallback, useState } from 'react';
import { Table, Input } from '@arco-design/web-react';

function UserList({ users }) {
  const [keyword, setKeyword] = useState('');

  // 缓存过滤后的用户列表
  const filteredUsers = useMemo(() => {
    if (!keyword) return users;
    return users.filter(user => 
      user.name.includes(keyword) || user.email.includes(keyword)
    );
  }, [users, keyword]);

  // 缓存事件处理函数
  const handleSearch = useCallback((value) => {
    setKeyword(value);
  }, []);

  return (
    <>
      <Input.Search onSearch={handleSearch} placeholder="搜索用户" />
      <Table data={filteredUsers} columns={columns} />
    </>
  );
}

6.8 性能监控与调试
在 React 18+ 中,使用 React DevTools 的 Profiler 可以分析组件渲染性能:

import { Profiler } from 'react';

function onRenderCallback(
  id,           // 这次提交的 Profiler 树的 id
  phase,        // "mount" 或 "update"
  actualDuration, // 本次更新渲染耗时
) {
  console.log(`${id} 渲染耗时: ${actualDuration}ms`);
}

function App() {
  return (
    <Profiler id="UserList" onRender={onRenderCallback}>
      <UserList />
    </Profiler>
  );
}

来源:
https://wkmsa.cn/

相关文章
|
12天前
|
JavaScript Java 关系型数据库
全栈(Java + Vue + MySQL)开发图书管理系统教程(四)
教程来源 http://lemci.cn 本节详述图书管理系统运行与测试全流程:涵盖JDK、Maven、Node.js、MySQL环境配置;后端(IDE/命令行/profile)与前端(开发/构建/端口)启动方式;Postman API测试(登录、借阅、归还等);并总结项目架构、技术亮点及JWT刷新、库存扣减、跨域处理等核心难点。
|
2月前
|
安全 Linux 网络安全
阿里云轻量服务器+本地部署OpenClaw集成Skills全指南:从安装到自定义教程
OpenClaw(Clawdbot)的核心价值在于通过Skills(技能)扩展实现功能定制,结合阿里云轻量服务器的稳定运行与本地环境的灵活开发,可快速搭建适配业务场景的AI智能体。本文基于2026年最新稳定版,从阿里云轻量服务器与本地(MacOS/Linux/Windows11)部署OpenClaw,到Skills集成、自定义开发及避坑指南,全程提供可直接复制的代码命令,助力零基础用户快速完成技能扩展,打造高效智能助手。
471 5
|
11天前
|
数据采集 人工智能 自然语言处理
舆情监控:如何让AI自动抓取新闻资讯,并生成每日摘要报告?
本文介绍一套AI驱动的自动化舆情监控方案:用站大爷隧道代理(高可用IP轮换)+ OpenClaw(零代码AI Agent)+ 大模型(智能摘要),7×24小时自动抓取、筛选、生成并推送结构化日报,彻底解决人工扫新闻耗时多、漏报频、易被封等问题。(239字)
172 9
|
10天前
|
人工智能 自然语言处理 安全
Open Claw 2.6.4 Windows 一键部署完整教程(技术分享)
OpenClaw(昵称“小龙虾”)是2026年热门开源AI智能体,GitHub星标超28万。支持本地运行、零代码操作、跨平台部署,可理解自然语言指令,自动完成文件管理、数据处理、浏览器自动化等任务,一键安装,隐私安全。
|
11天前
|
人工智能 测试技术 调度
移动端 RPA 的架构重构:基于多模态视觉大模型的自动化调度系统压测复盘
本文复盘企业级移动端RPA重构实践,介绍如何以“侠客工坊”AI数字员工平台替代传统坐标录制方案:基于多模态大模型实现视觉语义决策、高并发多机型调度、零代码编排、异常自愈及MCP协议集成,显著提升自动化鲁棒性与运维效率。
122 8
|
12天前
|
人工智能 运维 Linux
阿里云轻量服务器部署Hermes Agent全流程实操与百炼Token Plan 配置配置详解
在智能化工具持续迭代的当下,自主运行、具备记忆能力、支持多任务处理的AI智能体,逐渐成为个人与小型团队提升工作效率的核心载体。Hermes Agent作为开源轻量化智能体框架,具备持久化记忆存储、自定义技能拓展、多模型兼容、后台常驻运行等核心特性,能够独立完成指令执行、文件处理、信息整理、自动化调度等多项任务。依托云端服务器的稳定运行能力,搭配大模型订阅服务完成接口对接,可以实现全天候不间断服务,摆脱本地设备性能限制与离线运行短板。
207 7
|
12天前
|
供应链 安全 Java
Java安全漏洞深潜——反序列化、Log4Shell与供应链攻击
由于Java广泛应用于银行、政府、大型企业,其安全性备受瞩目。然而近年来频频爆发的高危漏洞(Log4Shell、Spring4Shell、FastJSON反序列化等)敲响了警钟。
110 7
|
15天前
|
编解码 数据可视化 前端开发
前端组件库——DataV知识点大全(二)
教程来源 https://www.xbivx.cn DataV提供40+高质量组件,涵盖边框(13种SVG动画边框)、装饰、数字翻牌器、滚动表格、水位图、锥形柱图、飞线图及全屏容器等,支持高度自定义与响应式适配,助力快速构建专业数据大屏。
|
16天前
|
前端开发 API 数据库
优化边缘情况:用 ​D​М‌X​Α‌РΙ 打折接入 gpt-image-2 的长连接方案
截至2026年4月23日,GPT-Image-2已正式上线API,标志视觉能力从“创意工具”跃升为可编排、可审计、可集成的生产级基础设施,赋能电商、农业、工业等多领域自动化工作流。(239字)
|
16天前
|
自然语言处理 安全 测试技术
大模型+超自动化:实在Agent从“句意理解”到“跨系统闭环执行”的技术链路
本文剖析实在Agent“六层闭环技术架构”,直击企业级智能体落地核心痛点——“认知-执行断层”。通过垂直大模型+全栈超自动化深度融合,实现从自然语言指令到跨系统业务闭环执行的端到端自主化,兼具国产化适配、强合规与高稳定性,为AI工程化提供可落地的技术范式。

热门文章

最新文章