Skip to content

Commit 15ff311

Browse files
committed
feat: using fastdom to improve performance
1 parent 2f9f5bc commit 15ff311

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
},
4343
"dependencies": {
4444
"element-resize-detector": "^1.1.14",
45+
"fastdom": "^1.0.9",
4546
"lodash": "^4.17.10",
4647
"shallowequal": "^1.1.0"
4748
},

src/ResizeProvider.tsx

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import * as React from 'react';
22
import { findDOMNode } from 'react-dom';
3+
import * as fastdom from 'fastdom';
34

5+
import { Size } from './types';
46
import { ContextValue, Provider } from './context';
57
import { getResizeDetector, getSize } from './methods';
68

@@ -11,6 +13,10 @@ export default class ResizeProvider extends React.PureComponent<{}, ContextValue
1113

1214
private currentListenElement: HTMLElement | null = null;
1315

16+
private measureID?: any;
17+
18+
private mutateID?: any;
19+
1420
componentDidMount() {
1521
this.updateListenElement()
1622
}
@@ -32,7 +38,20 @@ export default class ResizeProvider extends React.PureComponent<{}, ContextValue
3238
}
3339

3440
private onSizeChanged = (element: HTMLElement) => {
35-
this.setState({ size: getSize(element) })
41+
fastdom.clear(this.measureID);
42+
43+
this.measureID = fastdom.measure(() => {
44+
const size = getSize(element);
45+
this.updateSize(size)
46+
})
47+
};
48+
49+
private updateSize = (size: Size) => {
50+
fastdom.clear(this.mutateID);
51+
52+
this.mutateID = fastdom.mutate(() => {
53+
this.setState({ size: size })
54+
})
3655
};
3756

3857
private getElement() {

yarn.lock

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,13 @@ esutils@^2.0.2:
188188
resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
189189
integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
190190

191+
fastdom@^1.0.9:
192+
version "1.0.9"
193+
resolved "https://registry.yarnpkg.com/fastdom/-/fastdom-1.0.9.tgz#b395fab11a3701173c02a054fe769d8f596a0a26"
194+
integrity sha512-SSp4fbVzu8JkkG01NUX+0iOwe9M5PN3MGIQ84txLf4TkkJG4q30khkzumKgi4hUqO1+jX6wLHfnCPoZ6eSZ6Tg==
195+
dependencies:
196+
strictdom "^1.0.1"
197+
191198
fs.realpath@^1.0.0:
192199
version "1.0.0"
193200
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -357,6 +364,11 @@ sprintf-js@~1.0.2:
357364
resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
358365
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
359366

367+
strictdom@^1.0.1:
368+
version "1.0.1"
369+
resolved "https://registry.yarnpkg.com/strictdom/-/strictdom-1.0.1.tgz#189de91649f73d44d59b8432efa68ef9d2659460"
370+
integrity sha1-GJ3pFkn3PUTVm4Qy76aO+dJllGA=
371+
360372
strip-ansi@^3.0.0:
361373
version "3.0.1"
362374
resolved "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"

0 commit comments

Comments
 (0)