前端组件库 ——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/

相关文章
|
5天前
|
人工智能 弹性计算 运维
2026年阿里云轻量服务器选购参考:收费标准、活动配置与优惠价格解析
2026年阿里云轻量应用服务器的产品定位、优惠价格及选购策略参考:该产品主打"开箱即用",适配个人开发者、学生及小微企业,提供WordPress、宝塔面板、OpenClaw等丰富应用镜像,实现分钟级部署。当前优惠力度显著:2核2G抢购价低至38元/年,2核4G首月9.9元、包年199元。购买时需要注意峰值带宽与固定带宽的区别,建议用户根据需求在抢购轻量服务器与续费同价的ECS实例间灵活选择,找到最优性价比方案。
|
人工智能 运维 关系型数据库
智能运维+多模型服务能力,阿里云 RDS AI 助手旗舰版正式上线!
RDS AI 助手旗舰版在 RDS AI 助手专业版智能运维能力的基础上,提供灵活模型选择、智能模型路由、多模型灾备、API Key 集成等更自主可控、灵活便捷的模型服务,并支持纳管运维各类环境部署的数据库。
智能运维+多模型服务能力,阿里云 RDS AI 助手旗舰版正式上线!
|
17天前
|
运维 数据可视化 网络协议
精准检测网络,流畅访问无忧——VSPing助力高效测速运维
VSPing是一款专业在线Ping检测工具,支持多节点、多协议(ICMP/TCP/UDP)检测,覆盖全国31省及海外主流运营商。具备可视化图表、零安装、一键检测等特性,助力用户快速定位延迟、丢包、路由异常等问题,提升网络体验与运维效率。(239字)
241 12
|
23天前
|
JSON 测试技术 API
GLM-5.1上线一个多月了,现在讨论变少了,我反而想聊聊它
实测显示GLM-5.1在指令遵从度和任务延续性上表现突出,虽与顶尖模型存在约5%性能差距,但性价比优势显著,已成为开发者工具箱中的重要选项。
351 6
|
23天前
|
数据采集 运维 监控
Agent 烧钱如流水?Agentic OS (ANOLISA) 帮你逐笔看清 Token 账单
AgentSight 提供了能看清 Agent 全局状态和每笔 Token 去向的可视化面板。
|
21天前
|
人工智能 API 网络安全
OpenClaw 接入百炼模型:密钥创建+配置+报错排查全攻略
本教程详解OpenClaw客户端接入阿里云百炼的完整流程:从账号准备、API Key创建与保存,到客户端密钥配置、模型选择及连通测试,图文并茂,步骤清晰。涵盖自检清单与高频问题排查,助你快速稳定调用Qwen等百炼大模型。(239字)
|
23天前
|
Web App开发 移动开发 监控
手机H5页面直接打开APP实现方案
在移动端H5页面中,当用户点击"打开APP"按钮时:如果用户已安装APP,直接打开APP并跳转到指定页面,如果用户未安装APP,引导用户到应用商店下载,支持iOS和Android系统。
360 3
|
23天前
|
缓存 人工智能 运维
SysOM Agent智能运维系列:Pod内存高告警,一次对话30秒定位根因
让内存诊断从"靠经验排查"变成"可解释、可复现、可执行"的工程化流程。
|
1月前
|
人工智能 自然语言处理 安全
Open Claw 2.6.4 Windows 一键部署完整教程(技术分享)
OpenClaw(昵称“小龙虾”)是2026年热门开源AI智能体,GitHub星标超28万。支持本地运行、零代码操作、跨平台部署,可理解自然语言指令,自动完成文件管理、数据处理、浏览器自动化等任务,一键安装,隐私安全。
|
1月前
|
人工智能 测试技术 调度
移动端 RPA 的架构重构:基于多模态视觉大模型的自动化调度系统压测复盘
本文复盘企业级移动端RPA重构实践,介绍如何以“侠客工坊”AI数字员工平台替代传统坐标录制方案:基于多模态大模型实现视觉语义决策、高并发多机型调度、零代码编排、异常自愈及MCP协议集成,显著提升自动化鲁棒性与运维效率。
189 10