Skip to content

Commit 1122b21

Browse files
committed
docs(readMe): add perf section
1 parent 104840c commit 1122b21

File tree

5 files changed

+373
-524
lines changed

5 files changed

+373
-524
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,14 @@ As a result the state is always fresh and a stable and fresh view is always achi
6464
- [Simple Todos](https://solkimicreb.github.io/react-easy-state/examples/simpleTodos/) ([source](/examples/simpleTodos/))
6565
- [TodoMVC](https://solkimicreb.github.io/react-easy-state/examples/todoMVC/) ([source](/examples/todoMVC/))
6666

67+
## Performance
68+
69+
You can compare Easy State with plain React and other state management libraries with the below benchmarks. Generally it seems like Easy State performs a bit better than MobX, a bit worse than plain optimized React and similarly to Redux.
70+
71+
- [js-framework-benchmark](https://github.com/krausest/js-framework-benchmark) ([source](https://github.com/krausest/js-framework-benchmark/tree/master/react-v15.5.4-easy-state-v1.0.3)) ([results](https://rawgit.com/krausest/js-framework-benchmark/master/webdriver-ts-results/table.html))
72+
73+
The list of benchmarks will expand in the future.
74+
6775
## Platform support
6876

6977
- Node: 6 and above

dist/easyState.js

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ function has (value) {
9898
if (!rawContext) {
9999
return proto.has.apply(this, arguments)
100100
}
101-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["d" /* registerObserver */])(rawContext, value)
101+
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["c" /* registerObserver */])(rawContext, value)
102102
return proto.has.apply(rawContext, arguments)
103103
}
104104

@@ -108,7 +108,7 @@ function get (value) {
108108
if (!rawContext) {
109109
return proto.get.apply(this, arguments)
110110
}
111-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["d" /* registerObserver */])(rawContext, value)
111+
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["c" /* registerObserver */])(rawContext, value)
112112
return proto.get.apply(rawContext, arguments)
113113
}
114114

@@ -119,8 +119,8 @@ function add (value) {
119119
return proto.add.apply(this, arguments)
120120
}
121121
if (!proto.has.call(rawContext, value)) {
122-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["e" /* queueObservers */])(rawContext, value)
123-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["e" /* queueObservers */])(rawContext, ITERATE)
122+
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["d" /* queueObservers */])(rawContext, value)
123+
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["d" /* queueObservers */])(rawContext, ITERATE)
124124
}
125125
return proto.add.apply(rawContext, arguments)
126126
}
@@ -132,8 +132,8 @@ function set (key, value) {
132132
return proto.set.apply(this, arguments)
133133
}
134134
if (proto.get.call(rawContext, key) !== value) {
135-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["e" /* queueObservers */])(rawContext, key)
136-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["e" /* queueObservers */])(rawContext, ITERATE)
135+
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["d" /* queueObservers */])(rawContext, key)
136+
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["d" /* queueObservers */])(rawContext, ITERATE)
137137
}
138138
return proto.set.apply(rawContext, arguments)
139139
}
@@ -145,8 +145,8 @@ function deleteFn (value) {
145145
return proto.delete.apply(this, arguments)
146146
}
147147
if (proto.has.call(rawContext, value)) {
148-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["e" /* queueObservers */])(rawContext, value)
149-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["e" /* queueObservers */])(rawContext, ITERATE)
148+
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["d" /* queueObservers */])(rawContext, value)
149+
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["d" /* queueObservers */])(rawContext, ITERATE)
150150
}
151151
return proto.delete.apply(rawContext, arguments)
152152
}
@@ -158,7 +158,7 @@ function clear () {
158158
return proto.clear.apply(this, arguments)
159159
}
160160
if (rawContext.size) {
161-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["e" /* queueObservers */])(rawContext, ITERATE)
161+
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["d" /* queueObservers */])(rawContext, ITERATE)
162162
}
163163
return proto.clear.apply(rawContext, arguments)
164164
}
@@ -169,7 +169,7 @@ function forEach () {
169169
if (!rawContext) {
170170
return proto.forEach.apply(this, arguments)
171171
}
172-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["d" /* registerObserver */])(rawContext, ITERATE)
172+
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["c" /* registerObserver */])(rawContext, ITERATE)
173173
return proto.forEach.apply(rawContext, arguments)
174174
}
175175

@@ -179,7 +179,7 @@ function keys () {
179179
if (!rawContext) {
180180
return proto.keys.apply(this, arguments)
181181
}
182-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["d" /* registerObserver */])(rawContext, ITERATE)
182+
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["c" /* registerObserver */])(rawContext, ITERATE)
183183
return proto.keys.apply(rawContext, arguments)
184184
}
185185

@@ -189,7 +189,7 @@ function values () {
189189
if (!rawContext) {
190190
return proto.values.apply(this, arguments)
191191
}
192-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["d" /* registerObserver */])(rawContext, ITERATE)
192+
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["c" /* registerObserver */])(rawContext, ITERATE)
193193
return proto.values.apply(rawContext, arguments)
194194
}
195195

@@ -199,7 +199,7 @@ function entries () {
199199
if (!rawContext) {
200200
return proto.entries.apply(this, arguments)
201201
}
202-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["d" /* registerObserver */])(rawContext, ITERATE)
202+
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["c" /* registerObserver */])(rawContext, ITERATE)
203203
return proto.entries.apply(rawContext, arguments)
204204
}
205205

@@ -209,7 +209,7 @@ function iterator () {
209209
if (!rawContext) {
210210
return proto[Symbol.iterator].apply(this, arguments)
211211
}
212-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["d" /* registerObserver */])(rawContext, ITERATE)
212+
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["c" /* registerObserver */])(rawContext, ITERATE)
213213
return proto[Symbol.iterator].apply(rawContext, arguments)
214214
}
215215

@@ -219,7 +219,7 @@ function getSize () {
219219
if (!rawContext) {
220220
return Reflect.get(proto, 'size', this)
221221
}
222-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["d" /* registerObserver */])(rawContext, ITERATE)
222+
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__observer__["c" /* registerObserver */])(rawContext, ITERATE)
223223
return Reflect.get(proto, 'size', rawContext)
224224
}
225225

@@ -252,13 +252,13 @@ const rawToProxy = new WeakMap()
252252
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__store__ = __webpack_require__(94);
253253
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__internals__ = __webpack_require__(26);
254254
/* harmony export (immutable) */ __webpack_exports__["b"] = observe;
255-
/* harmony export (immutable) */ __webpack_exports__["c"] = unobserve;
255+
/* unused harmony export unobserve */
256256
/* unused harmony export unqueue */
257257
/* unused harmony export exec */
258258
/* unused harmony export isObservable */
259259
/* harmony export (immutable) */ __webpack_exports__["a"] = observable;
260-
/* harmony export (immutable) */ __webpack_exports__["d"] = registerObserver;
261-
/* harmony export (immutable) */ __webpack_exports__["e"] = queueObservers;
260+
/* harmony export (immutable) */ __webpack_exports__["c"] = registerObserver;
261+
/* harmony export (immutable) */ __webpack_exports__["d"] = queueObservers;
262262

263263

264264

@@ -447,13 +447,20 @@ function easyStateHOC (WrappedComp) {
447447
return result
448448
}
449449

450-
componentWillUnmount () {
451-
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__nx_js_observer_util__["c" /* unobserve */])(this[OBSERVED_RENDER])
452-
this[OBSERVED_RENDER] = undefined
453-
super.componentWillUnmount && super.componentWillUnmount()
454-
}
450+
shouldComponentUpdate (nextProps) {
451+
const { props } = this
452+
const keys = Object.keys(props)
453+
const nextKeys = Object.keys(nextProps)
454+
455+
if (keys.length !== nextKeys.length) {
456+
return true
457+
}
455458

456-
shouldComponentUpdate () {
459+
for (let key of keys) {
460+
if (props[key] !== nextProps[key]) {
461+
return true
462+
}
463+
}
457464
return false
458465
}
459466
}
@@ -470,7 +477,7 @@ function easyStateHOC (WrappedComp) {
470477
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__observer__["a"]; });
471478
/* unused harmony reexport isObservable */
472479
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_0__observer__["b"]; });
473-
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_0__observer__["c"]; });
480+
/* unused harmony reexport unobserve */
474481
/* unused harmony reexport unqueue */
475482
/* unused harmony reexport exec */
476483

0 commit comments

Comments
 (0)