热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于React项目开发中总结(性能优化)

最近一直忙着做一些性能方面的工作,理论和实践真的是缺一不可的事情,知道的事情,但是大多数很难做到,这次可以说是一个自我的提升

最近一直忙着做一些性能方面的工作,理论和实践真的是缺一不可的事情,知道的事情,但是大多数很难做到,这次可以说是一个自我的提升,首先对于性能优化是必须要最的事情,也是开发中最重要的事,优化的点也很多,我开始冲代码的结构角度去考虑问题,现在使用的单页面应用,是否在打包过程中出现文件太大,导致加载太慢的问题,所以第一点要分块处理,第二要提取公共部分,不会出现多次加载相同部分,整体优化方案做了如何工作:

一、and design react 样式做按需加载

1、eject情况下配置antd按需加载
(1)安装 babel-plugin-import

npm install babel-plugin-import --save

(2)package.json文件下添加

"plugins": [["import",{"libraryName": "antd","style": "css"}]]

2、不eject情况下配置antd按需加载
(1)安装 react-app-rewired

npm install react-app-rewired --save

(2)修改config-overrides.js文件

const { injectBabelPlugin } = require('react-app-rewired');module.exports = function override(config, env) {config = injectBabelPlugin(['import', { libraryName: 'antd', libraryDirectory: 'es', style: 'css' }],config,)return config;
};

(3) 修改package.json文件中的start、build、test 命令

"scripts": {
- "start": "react-scripts start",
+ "start": "react-app-rewired start",
- "build": "react-scripts build",
+ "build": "react-app-rewired build",
- "test": "react-scripts test --env=jsdom",
+ "test": "react-app-rewired test --env=jsdom","eject": "react-scripts eject"
}

(4)引入babel-plugin-import

npm install babel-plugin-import --save

二、路由lazy 懒加载

1、使用lazy import 异步导入路由

import { lazy } from 'react';
import PageInit from '../pages/error/pageInit'const Home = lazy(()=>import('../pages/home/home'))
const Login = lazy(()=>import('../pages/login/login'))
const Log = lazy(()=>import('../pages/log/index'))
const User = lazy(()=>import('../pages/user/user'))
const Role = lazy(()=>import('../pages/role/role'))
const Userinfo = lazy(()=>import('../pages/user/userinfo'))
const ServerInfo = lazy(()=>import('../pages/user/serverInfo'))
const History = lazy(()=>import('../pages/history/history'))
const Device = lazy(()=>import('../pages/device/index'))
const MpUser = lazy(()=>import('../pages/mpUser/mpUser'))
const Alarm = lazy(()=>import('../pages/alarm/alarm'))
const DevMonitor = lazy(()=>import('../pages/interDev/devMonitor'))

2、Suspense 处理加载样式

<Suspense fallback&#61;{<PageLoading />}><Route path&#61;"/"render&#61;{props &#61;>this.authorUser(props)}/>
</Suspense>

3、提取公共的模块

利用webpack打包工具&#xff0c;把公共的代码提取&#xff0c;使用optimization属性配置

splitChunks: {chunks: &#39;all&#39;,name: false,// maxSize:614400,// minSize:409600,maxAsyncRequests:60,maxInitialRequests:60,cacheGroups: {reactDom: {test: /[\\/]node_modules[\\/](react|react-dom)[\\/]/,name: &#39;reactDom&#39;,chunks: &#39;all&#39;,},// echartDom: {// test: /[\\/]node_modules[\\/](echarts)[\\/]/,// name: &#39;echartsDom&#39;,// chunks: &#39;all&#39;,// },// antLibDom: {// test: /[\\/]node_modules[\\/](antd[\\/]lib)[\\/]/,// name: &#39;antLibDom&#39;,// chunks: &#39;all&#39;,// },// renderDom: {// test: /[\\/]node_modules[\\/](zrender[\\/]lib)[\\/]/,// name: &#39;renderDom&#39;,// chunks: &#39;all&#39;,// }}},

4、图片database64 压缩

使用在线工具对图片进行压缩处理&#xff0c;这里不再说明&#xff0c;推荐网站http://tools.whsir.com/dataurl/

5、echarts 按需加载 和CDN 处理

在webpack 分析工具的帮助下发现文件太大了&#xff0c;加载速度自然提不上了&#xff0c;所有这里借助CDN处理

6、文件包分析工具使用

webpack-chart&#xff1a;Webpack统计信息的交互式饼图。
webpack-visualizer&#xff1a;可视化和分析您的包&#xff0c;以查看哪些模块占用了空间&#xff0c;哪些可能是重复的。
webpack-bundle-analyzer&#xff1a;一个插件和CLI实用程序&#xff0c;将包内容表示为方便的交互式可缩放树形图。
webpack软件包优化助手&#xff1a;此工具将分析您的软件包&#xff0c;并为您提供切实可行的建议&#xff0c;以减少软件包的大小。
bundle-stats&#xff1a;生成捆绑包报告&#xff08;捆绑包大小&#xff0c;资产&#xff0c;模块&#xff09;&#xff0c;并比较不同版本之间的结果
这里我使用webpack-bundle-analyzer 进行分析打包后文件大小


NPM

npm install --save-dev webpack-bundle-analyzer

Yarn

yarn add -D webpack-bundle-analyzerconst BundleAnalyzerPlugin &#61; require(&#39;webpack-bundle-analyzer&#39;).BundleAnalyzerPlugin;module.exports &#61; {plugins: [new BundleAnalyzerPlugin()]
}

在这里插入图片描述

7、文件压缩处理

首先&#xff0c;您需要安装compression-webpack-plugin&#xff1a;

$ npm install compression-webpack-plugin --save-dev

然后将插件添加到您的webpack配置中。例如&#xff1a;

webpack.config.js
const CompressionPlugin &#61; require("compression-webpack-plugin");module.exports &#61; {plugins: [new CompressionPlugin()],
};

8、代码结构&#xff08;这是首先优化的地方&#xff09;
代码太多&#xff0c;不做说明


推荐阅读
  • ReactJSUIAnt设计空组件原文:https://w ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • npminstall-Dbabelcorebabelpreset-envbabelplugin-transform-runtimebabelpolyfillbabel-loader ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • node.jsrequire和ES6导入导出的区别原 ... [详细]
  • 本文介绍了JavaScript进化到TypeScript的历史和背景,解释了TypeScript相对于JavaScript的优势和特点。作者分享了自己对TypeScript的观察和认识,并提到了在项目开发中使用TypeScript的好处。最后,作者表示对TypeScript进行尝试和探索的态度。 ... [详细]
  • 在加载一个第三方厂商的dll文件时,提示“找不到指定模块,加载失败”。由于缺乏必要的技术支持,百思不得期间。后来发现一个有用的工具 ... [详细]
  • React 小白初入门
    推荐学习:React官方文档:https:react.docschina.orgReact菜鸟教程:https:www.runoob.c ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • 1.移除consol.log()的babel插件安装:npmibabel-plugin-transform-remove-console-D配置:babel.config.js:这 ... [详细]
  • 前言:原本纠结于Web模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中ev ... [详细]
author-avatar
手机用户2502896641
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有