背景

随着项目越来越复杂,功能够越来越多,JS单个文件就会比较臃肿,js代码拆分显得必不可少。

Js文件拆分主要分为按照路由进行js拆分、按照组件进行js拆分。

  1. 按照路由拆分:因为本项目请求路径得原因,按照路由拆分不适用。只能按照组件模式进行拆分。
  2. 按照组件进行拆分,能够将js拆分的更为彻底。本方式使用react-loadable

按组件组件拆分

未进行组件文件拆分,大小如下:

showTabs,结算以及票据模块拆分之后项目js大小如下:20m

拆分完成信贷模块之后

全部组件拆分完毕:

拆分出现的问题以及解决方式

拆分太细出现一个非常严重的问题就是:占用内存过高,启动的时候代码崩溃了。目前的解决方式是在修改打包方式,强制改变V8默认内存限制

"scripts": {

"start": "set BROWSER=none&&set HOST=127.0.0.1&&set PORT=8000&&roadhog server",

"lint": "eslint --fix --ext .js src",

"build": "node --max_old_space_size=4096 node_modules/roadhog/lib/build.js",

"precommit": "npm run lint"

}

拆分文件改造

项目所有的组件都集中在showTabs上,导致打包的时候该文件最大,现在拆分组要是针对showTabs.jsx文件进行拆分,拆分方式如下:

  1. 针对import引入的组件进行按需加载,按功能划分

在Common中按照功能划分不同的文件,并将功能组件进行按需加载

引用方式

import Loadable from 'react-loadable';
/********组件加载事件处理*********/
const MyLoadingComponent = ({ error }) => {
if (error) {
return <div>Error!</div>;
} else {
return <div>Loading...</div>;
}
}
//account
export const AccountInformationTable = Loadable({
loader: () => import('components/account/AccountInformationTable.jsx'),
loading: MyLoadingComponent
});
export const AccountInformationDetail = Loadable({
loader: () => import('components/account/AccountInformationDetail.jsx'),
loading: MyLoadingComponent
});
export const AccountHistoryBalanceTable = Loadable({
loader: () => import('components/account/AccountHistoryBalanceTable.jsx'),
loading: MyLoadingComponent
});
export const AccountTradingDetailTable = Loadable({
loader: () => import('components/account/AccountTradingDetailTable.jsx'),
loading: MyLoadingComponent
});
export const AccountChangeRecordTable = Loadable({
loader: () => import('components/account/AccountChangeRecordTable.jsx'),
loading: MyLoadingComponent
});

react以组件为中心的代码分割和懒加载的更多相关文章

  1. webpack4 系列教程(四): 单页面解决方案--代码分割和懒加载

    本节课讲解webpack4打包单页应用过程中的代码分割和代码懒加载.不同于多页面应用的提取公共代码,单页面的代码分割和懒加载不是通过webpack配置来实现的,而是通过webpack的写法和内置函数实 ...

  2. webpack散记---代码分割 和 懒加载

    webpack methods ES 2015 Loader spec (1)webpack methods方法 require.ensure //可以动态加载依赖 []:dependencies / ...

  3. React配合Webpack实现代码分割与异步加载

    这是Webpack+React系列配置过程记录的第四篇.其他内容请参考: 第一篇:使用webpack.babel.react.antdesign配置单页面应用开发环境 第二篇:使用react-rout ...

  4. Vue 路由懒加载, VueRouter一步完成Vue的路由懒加载 一行代码搞定懒加载

    Vue Router路由配置中的component里面配置即可 1 // 路由懒加载的方式加载组件 2 3 component: () => import('@/views/Detail'), ...

  5. 基于webpack的前端工程化开发解决方案探索(二):代码分割与图片加载

    今天我们继续来进行webpack工程化开发的探索! 首先来验证上一篇文章   基于webpack的前端工程化开发解决方案探索(一):动态生成HTML  中的遗留问题:webpack将如何处理按需加载的 ...

  6. 在webpack中使用Code Splitting--代码分割来实现vue中的懒加载

    当Vue应用程序越来越大,使用Webpack的代码分割来懒加载组件,路由或者Vuex模块, 只有在需要时候才加载代码. 我们可以在Vue应用程序中在三个不同层级应用懒加载和代码分割: 组件,也称为异步 ...

  7. Ionic3 组件懒加载

    使用懒加载能够减少程序启动时间,减少打包后的体积,而且可以很方便的使用路由的功能. 使用懒加载: 右侧红色区域可以省略掉(引用.声明也删掉) 若使用ionic命令新建page,则无需进行下面的操作,否 ...

  8. Ionic3新特性--页面懒加载2加载其他组件

    在第一节中,我们介绍了页面的懒加载方式,并进行了初步的分析,这里,我们将进一步介绍如何配合页面懒加载进行其他组件Component.Pipe.Directive等的模块化,和加载使用. 首先说明一点, ...

  9. [IOS 开发] 懒加载 (延迟加载) 的基本方式,好处,代码示例

    懒加载的好处: 1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 ...

随机推荐

  1. STL算法之find

    定义 template <class InputIterator, class T> InputIterator find (InputIterator first, InputItera ...

  2. kill 一个名字 程序的所有进程

    ps aux | grep chrome | awk '{print $2}' | xargs kill -9

  3. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_11-课程详情页面静态化-课程信息模板设计

    测试模板 页面的模板已经做好了 直接那来用 测试模板,把这个模板copy到这个测试freemarker的resources目录 远程调用 获取数据 返回模板的文件名 tomcat不支持ssr.ngin ...

  4. jmeter 查看结果树,获取响应体写法校验是否提取写法是否正确的方法

    JSON Path Expression里面写入提出值的写法,点击Test测试提取

  5. python基础之知识补充-作用域、特殊语法

    python作用域 无函数的作用域 在python中没有块级作用域 什么叫块级作用域呢?先来看个例子: if 1 == 1: name= 'alex' print(name) 运行结果为alex 在j ...

  6. 【设计思路】Booking优化

    https://www.uisdc.com/booking-redesign https://medium.muz.li/booking-com-ux-case-study-7ffb39e54791

  7. 第十三章 RememberMe——《跟我学Shiro》

    转发地址:https://www.iteye.com/blog/jinnianshilongnian-2031823 目录贴:跟我学Shiro目录贴 Shiro提供了记住我(RememberMe)的功 ...

  8. iOS技术面试05:UI控件

    怎么解决缓存池满的问题 1> 优先移除使用次数比较少的对象 2> 优先移除缓存时间最长的对象(让年轻的活下来) 3> 优先移除占用内存比较大的对象 CAAnimation的层级结构 ...

  9. (1)、JEasyUI 之 Datagrid的Combobox 显示 textField 值的问题

    (1).JEasyUI 之datagrid的Combobox显示textField值的问题 官方的datagrid Demo Row Editing in DataGrid 中field 是否如下定义 ...

  10. 帝国cms 批量替换语句

    UPDATE www_92game_net_cnys_ecms_caipu SET titlepic=REPLACE(titlepic,'http://file.92game.net', '') ; ...