Skip to content

Commit

Permalink
Updated changelog
Browse files Browse the repository at this point in the history
  • Loading branch information
mweststrate committed Aug 30, 2016
1 parent 082d5b4 commit 71e93e0
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 41 deletions.
50 changes: 49 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,57 @@
# 2.5.0

* Introduced setters for computed properties, use `computed(expr, setter)` or `@computed name get() { return expr } set(value) { action }`, #421, #463
* Core derivation algorithm has received some majore improvements by @asterius1! See below. Pr #452, 489
* Introduced setters for computed properties, use `computed(expr, setter)` or `@computed name get() { return expr } set(value) { action }`. `computed` can now be used as modifier in `observable` / `extendObservable`, #421, #463
* Introduced `isStrictModeEnabled()`, deprecated `useStrict()` without arguments, see #464
* Fixed #505, accessing an observable property throws before it is initialized

MobX is now able track and memoize computed values while an (trans)action is running.
Before 2.5, accessing a computed value during a transaction always resulted in a recomputation each time the computed value was accessed, because one of the upstream observables (might) have changed.
In 2.5, MobX actively tracks whether one of the observables has changed and won't recompute computed values unnecessary.
This means that computed values are now always memoized for the duration of the current action.
In specific cases, this might signficantly speed up actions that extensively make decisions based on computed values.

Example:
```javascript
class Square {
@observable length = 2
@computed get squared() {
return this.length * this.length
}
// mobx now supports setters for computed values
set squared(surfaceSize) {
this.length = Math.sqrt(surfaceSize)
}

// core changes make actions more efficient if extensively using computed values:
@action stuff() {
this.length = 3
console.log(this.squared) // recomputes in both 2.5 and before
console.log(this.squared) // no longer recomputes
this.length = 4
console.log(this.squared) // recomputes in both 2.5 and before
// after the action, before 2.5 squared would compute another time (if in use by a reaction), that is no longer the case
}
}
```

ES5 example for setters:
```javascript
function Square() {
extendObservable(this, {
length: 2,
squared: computed(
function() {
return this.squared * this.squared
},
function(surfaceSize) {
this.length = Math.sqrt(surfaceSize)
}
)
})
}
```

# 2.4.4

* Fixed #503: map.delete returns boolean
Expand Down
80 changes: 40 additions & 40 deletions test/perf/perf.txt
Original file line number Diff line number Diff line change
@@ -1,51 +1,51 @@

One observers many observes one - Started/Updated in 34/57 ms.
500 props observing sibling - Started/Updated in 3/6 ms.
Late dependency change - Updated in 57ms.
One observers many observes one - Started/Updated in 33/33 ms.
500 props observing sibling - Started/Updated in 3/4 ms.
Late dependency change - Updated in 54ms.
Unused computables - Updated in 0 ms.
Unused observables - Updated in 10 ms.
Array reduce - Started/Updated in 29/26 ms.
Array loop - Started/Updated in 104/173 ms.
Order system batched: false tracked: true Started/Updated in 351/42 ms.
Order system batched: true tracked: true Started/Updated in 87/33 ms.
Order system batched: false tracked: false Started/Updated in 96/43 ms.
Order system batched: true tracked: false Started/Updated in 100/41 ms.
Unused observables - Updated in 8 ms.
Array reduce - Started/Updated in 31/24 ms.
Array loop - Started/Updated in 127/207 ms.
Order system batched: false tracked: true Started/Updated in 375/42 ms.
Order system batched: true tracked: true Started/Updated in 83/38 ms.
Order system batched: false tracked: false Started/Updated in 98/45 ms.
Order system batched: true tracked: false Started/Updated in 97/42 ms.

Create array - Created in 306ms.

Create array (non-recursive) Created in 72ms.
Observable with many observers + dispose: 2212ms
expensive sort: created 3621
expensive sort: updated 17047
expensive sort: disposed407
native plain sort: updated 1008
computed memoization 1ms
create folders 1ms.
Create array (non-recursive) Created in 65ms.
Observable with many observers + dispose: 1179ms
expensive sort: created 2967
expensive sort: updated 11853
expensive sort: disposed453
native plain sort: updated 991
computed memoization 0ms
create folders 0ms.
create displayfolders 1ms.
create text 239ms.
collapse folder 2ms.
create text 227ms.
collapse folder 1ms.
uncollapse folder 0ms.
change name of folder 233ms.
search 53ms.
unsearch 218ms.
change name of folder 332ms.
search 59ms.
unsearch 246ms.
reactive folder tree [total]
749ms.
create folders 24ms.
create displayfolders 2ms.
create text 70ms.
collapse folder 25ms.
uncollapse folder 14ms.
change name of folder 15ms.
search 32ms.
unsearch 24ms.
868ms.
create folders 23ms.
create displayfolders 1ms.
create text 91ms.
collapse folder 4ms.
uncollapse folder 6ms.
change name of folder 10ms.
search 35ms.
unsearch 18ms.
reactive folder tree [total]
207ms.
create boxes 84ms.
mutations 447ms.
total 540ms.
create boxes 88ms.
mutations 708ms.
total 875ms.
190ms.
create boxes 86ms.
mutations 450ms.
total 545ms.
create boxes 85ms.
mutations 696ms.
total 865ms.


Completed performance suite in 29.476 sec.
Completed performance suite in 23.022 sec.

0 comments on commit 71e93e0

Please sign in to comment.