From 782b8035421dd4814d36e1097077ebe00ec48cb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=B8=85?= Date: Fri, 15 Jun 2018 10:49:28 +0800 Subject: [PATCH] Optimize performance --- .webpackrc.js | 19 ++++ src/components/Charts/Bar/index.js | 32 +++--- src/components/Charts/ChartCard/index.js | 120 +++++++++++++---------- src/components/Charts/Pie/index.js | 36 ++++--- src/components/Charts/WaterWave/index.js | 24 +++-- 5 files changed, 137 insertions(+), 94 deletions(-) diff --git a/.webpackrc.js b/.webpackrc.js index 4d405e5f..2722109c 100755 --- a/.webpackrc.js +++ b/.webpackrc.js @@ -28,4 +28,23 @@ export default { publicPath: '/', disableDynamicImport: true, hash: true, + cssLoaderOptions: { + modules: true, + getLocalIdent: (context, localIdentName, localName) => { + if (context.resourcePath.includes('node_modules')) { + return localName; + } + + let antdProPath = context.resourcePath.match(/src(.*)/)[1]; + if (context.resourcePath.includes('components')) { + antdProPath = antdProPath.replace('components/', ''); + } + const arr = antdProPath + .split('/') + .map(a => a.replace(/([A-Z])/g, '-$1')) + .map(a => a.toLowerCase()); + arr.pop(); + return `antd-pro${arr.join('-')}-${localName}`.replace('--', '-'); + }, + }, }; diff --git a/src/components/Charts/Bar/index.js b/src/components/Charts/Bar/index.js index c91e6701..ee188f1b 100644 --- a/src/components/Charts/Bar/index.js +++ b/src/components/Charts/Bar/index.js @@ -25,27 +25,25 @@ class Bar extends Component { if (!this.node) { return; } - requestAnimationFrame(() => { - const canvasWidth = this.node.parentNode.clientWidth; - const { data = [], autoLabel = true } = this.props; - if (!autoLabel) { - return; - } - const minWidth = data.length * 30; - const { autoHideXLabels } = this.state; + const canvasWidth = this.node.parentNode.clientWidth; + const { data = [], autoLabel = true } = this.props; + if (!autoLabel) { + return; + } + const minWidth = data.length * 30; + const { autoHideXLabels } = this.state; - if (canvasWidth <= minWidth) { - if (!autoHideXLabels) { - this.setState({ - autoHideXLabels: true, - }); - } - } else if (autoHideXLabels) { + if (canvasWidth <= minWidth) { + if (!autoHideXLabels) { this.setState({ - autoHideXLabels: false, + autoHideXLabels: true, }); } - }); + } else if (autoHideXLabels) { + this.setState({ + autoHideXLabels: false, + }); + } } handleRoot = n => { diff --git a/src/components/Charts/ChartCard/index.js b/src/components/Charts/ChartCard/index.js index c3ee1865..dbb6efbc 100644 --- a/src/components/Charts/ChartCard/index.js +++ b/src/components/Charts/ChartCard/index.js @@ -1,5 +1,5 @@ import React from 'react'; -import { Card, Spin } from 'antd'; +import { Card } from 'antd'; import classNames from 'classnames'; import styles from './index.less'; @@ -19,59 +19,77 @@ const renderTotal = total => { return totalDom; }; -const ChartCard = ({ - loading = false, - contentHeight, - title, - avatar, - action, - total, - footer, - children, - ...rest -}) => { - const content = ( -
-
-
{avatar}
-
-
- {title} - {action} -
- {renderTotal(total)} -
-
- {children && ( -
-
{children}
-
- )} - {footer && ( +class ChartCard extends React.PureComponent { + state = { + loading: true, + }; + componentDidMount() { + requestAnimationFrame(() => { + this.setState({ + loading: false, + }); + }); + } + renderConnet = () => { + const { contentHeight, title, avatar, action, total, footer, children, loading } = this.props; + if (loading || this.state.loading) { + return false; + } + return ( +
- {footer} +
{avatar}
+
+
+ {title} + {action} +
+ {renderTotal(total)} +
- )} -
- ); - - return ( - - { - - {content} - - } - - ); -}; + {children && ( +
+
{children}
+
+ )} + {footer && ( +
+ {footer} +
+ )} +
+ ); + }; + render() { + const { + loading = false, + contentHeight, + title, + avatar, + action, + total, + footer, + children, + ...rest + } = this.props; + return ( + + {this.renderConnet()} + + ); + } +} export default ChartCard; diff --git a/src/components/Charts/Pie/index.js b/src/components/Charts/Pie/index.js index b17dc88b..0722077b 100644 --- a/src/components/Charts/Pie/index.js +++ b/src/components/Charts/Pie/index.js @@ -19,7 +19,13 @@ export default class Pie extends Component { }; componentDidMount() { - window.addEventListener('resize', this.resize, { passive: true }); + window.addEventListener( + 'resize', + () => { + requestAnimationFrame(() => this.resize()); + }, + { passive: true } + ); } componentDidUpdate(preProps) { @@ -66,24 +72,22 @@ export default class Pie extends Component { @Bind() @Debounce(300) resize() { - requestAnimationFrame(() => { - const { hasLegend } = this.props; - if (!hasLegend || !this.root) { - window.removeEventListener('resize', this.resize); - return; - } - if (this.root.parentNode.clientWidth <= 380) { - if (!this.state.legendBlock) { - this.setState({ - legendBlock: true, - }); - } - } else if (this.state.legendBlock) { + const { hasLegend } = this.props; + if (!hasLegend || !this.root) { + window.removeEventListener('resize', this.resize); + return; + } + if (this.root.parentNode.clientWidth <= 380) { + if (!this.state.legendBlock) { this.setState({ - legendBlock: false, + legendBlock: true, }); } - }); + } else if (this.state.legendBlock) { + this.setState({ + legendBlock: false, + }); + } } handleRoot = n => { diff --git a/src/components/Charts/WaterWave/index.js b/src/components/Charts/WaterWave/index.js index c1369c42..ce4530c0 100644 --- a/src/components/Charts/WaterWave/index.js +++ b/src/components/Charts/WaterWave/index.js @@ -17,7 +17,13 @@ export default class WaterWave extends PureComponent { this.renderChart(); this.resize(); }); - window.addEventListener('resize', this.resize, { passive: true }); + window.addEventListener( + 'resize', + () => { + requestAnimationFrame(() => this.resize()); + }, + { passive: true } + ); } componentWillUnmount() { @@ -29,15 +35,13 @@ export default class WaterWave extends PureComponent { } resize = () => { - requestAnimationFrame(() => { - if (this.root) { - const { height } = this.props; - const { offsetWidth } = this.root.parentNode; - this.setState({ - radio: offsetWidth < height ? offsetWidth / height : 1, - }); - } - }); + if (this.root) { + const { height } = this.props; + const { offsetWidth } = this.root.parentNode; + this.setState({ + radio: offsetWidth < height ? offsetWidth / height : 1, + }); + } }; renderChart() { -- GitLab