Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

try faster shallowEqual #17

Merged
merged 1 commit into from
May 24, 2019
Merged

try faster shallowEqual #17

merged 1 commit into from
May 24, 2019

Conversation

theKashey
Copy link
Owner

It's hard to compare two different versions of shallowEqual.
I've tried 6 cases(3 x with/without memoization)

  • it's MUCH(x7) faster on simple (flat) cases. Especially without memoization
  • it's a bit (790 vs 810) slower on hybrid cases
  • it's up to x2 faster on deeply nested cases.

Roughly - it has a simpler comparison loop, and preparation loop is also just O(n), while old sorting is more or less unpredictable.

All tests are green, but I would like to double check from you, that your tests are also green.

}
node[path[lastIndex]] = EDGE;
}
return root; // FIXME
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This FIXME comment was there because I thought you don't want to use weakMemoizeArray but something like weakMemoizeObject which can eliminate if (old.length === arg.length) { check.
If it's not a big issue, please just remove the FIXME comment.

) {
continue;
const root = memoizedBuildTrie(locations);
const walk = (la, lb, node) => {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can define walk outside of proxyShallowEqual which gives me better benchmark result. @theKashey

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How do you deal with differ.unshift(item); in walk?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a global variable. Actually I should also extract run, to keep function as simple as possible.

@dai-shi
Copy link
Collaborator

dai-shi commented May 2, 2019

proxyequal 2.0.6 proxyEqual
Running benchmark deeptree-nested-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-nested-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                          │
│         │ (Mount, Avg) │                                                                                     │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────────────────────────────┤
│ 50.12   │ 188.3, 0.5   │ 59,54,59,57,55,58,56,52,55,56,55,54,53,48,46,43,46,44,43,45,40,45,42,40,39,45,41,41 │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────────────────────────────┘
Running benchmark deeptree-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                 │
│         │ (Mount, Avg) │                                                                            │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────────────────┤
│ 37.66   │ 96.5, 0.8    │ 44,43,45,47,43,44,41,45,47,49,46,41,47,46,43,28,27,26,27,28,26,27,28,27,27 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────────────────┘
Running benchmark forms-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark forms-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                     │
│         │ (Mount, Avg) │                                                                │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────┤
│ 55.99   │ 1152.3, 0.3  │ 54,52,56,55,54,56,55,59,56,58,57,58,57,56,57,58,56,53,52,54,54 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────┘
Running benchmark stockticker-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark stockticker-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                              │
│         │ (Mount, Avg) │                                                                         │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────────────────┤
│ 23.81   │ 347.6, 0.2   │ 22,24,25,24,23,25,23,25,23,24,25,24,23,24,25,24,23,22,23,24,25,22,23,23 │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────────────────┘
Running benchmark tree-view-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark tree-view-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                    │
│         │ (Mount, Avg) │                                                                               │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────────────────┤
│ 47.46   │ 715.4, 1.4   │ 49,29,48,54,48,45,42,39,48,51,53,48,52,41,49,50,43,46,48,53,45,54,51,50,48,48 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────────────────┘
Running benchmark twitter-lite-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark twitter-lite-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                        │
│         │ (Mount, Avg) │                                                                   │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────┤
│ 54.90   │ 3.1, 0.9     │ 59,60,59,60,59,60,59,60,59,60,59,53,59,57,52,49,45,42,43,34,35,35 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────┘
proxyequal 2.0.6 proxyShallowEqual
Running benchmark deeptree-nested-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-nested-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                    │
│         │ (Mount, Avg) │                                                                               │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────────────────┤
│ 50.30   │ 175.2, 0.5   │ 51,57,60,55,56,58,57,56,54,56,54,55,53,52,45,44,41,46,38,45,48,42,41,45,44,44 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────────────────┘
Running benchmark deeptree-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                        │
│         │ (Mount, Avg) │                                                                   │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────┤
│ 37.17   │ 105.6, 0.8   │ 41,43,44,45,42,43,44,45,44,46,43,46,42,27,26,27,28,26,27,29,26,26 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────┘
Running benchmark forms-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark forms-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                        │
│         │ (Mount, Avg) │                                                                   │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────┤
│ 56.29   │ 1213.7, 0.3  │ 55,56,57,58,57,56,57,58,59,56,58,57,53,57,54,56,54,56,57,56,53,53 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────┘
Running benchmark stockticker-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark stockticker-useReduxState:
┌─────────┬──────────────┬──────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                   │
│         │ (Mount, Avg) │                                              │
├─────────┼──────────────┼──────────────────────────────────────────────┤
│ 16.75   │ 333.1, 0.2   │ 17,18,17,18,16,17,16,17,16,17,16,15,16,15,15 │
└─────────┴──────────────┴──────────────────────────────────────────────┘
Running benchmark tree-view-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark tree-view-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                             │
│         │ (Mount, Avg) │                                                                                        │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────────────────────────────┤
│ 47.36   │ 764.3, 1.4   │ 52,32,49,52,42,44,33,50,44,55,51,44,56,42,48,46,42,45,47,53,47,51,58,45,51,53,48,46,46 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────────────────────────────┘
Running benchmark twitter-lite-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark twitter-lite-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                     │
│         │ (Mount, Avg) │                                                                │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────┤
│ 55.07   │ 3.9, 0.9     │ 59,60,59,60,59,60,59,58,54,56,59,58,57,54,47,46,43,42,40,37,37 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────┘
proxyequal fa66cca proxyShallowEqual
Running benchmark deeptree-nested-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-nested-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                     │
│         │ (Mount, Avg) │                                                                │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────┤
│ 49.91   │ 157.4, 0.5   │ 55,57,59,55,57,53,55,53,52,51,42,46,44,34,46,40,46,39,37,43,43 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────┘
Running benchmark deeptree-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                    │
│         │ (Mount, Avg) │                                                                               │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────────────────┤
│ 37.05   │ 94.1, 0.8    │ 45,43,47,45,44,43,44,42,43,39,45,46,43,41,45,40,27,26,25,27,28,27,26,28,27,27 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────────────────┘
Running benchmark forms-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark forms-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                     │
│         │ (Mount, Avg) │                                                                │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────┤
│ 56.57   │ 1179.7, 0.3  │ 56,57,58,57,56,57,58,59,58,56,55,57,58,54,56,57,56,57,53,57,57 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────┘
Running benchmark stockticker-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark stockticker-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                      │
│         │ (Mount, Avg) │                                                 │
├─────────┼──────────────┼─────────────────────────────────────────────────┤
│ 16.95   │ 298.2, 0.2   │ 18,19,18,17,18,17,18,16,15,17,16,15,16,15,16,16 │
└─────────┴──────────────┴─────────────────────────────────────────────────┘
Running benchmark tree-view-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark tree-view-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                          │
│         │ (Mount, Avg) │                                                                                     │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────────────────────────────┤
│ 47.66   │ 734.0, 1.5   │ 52,30,53,56,45,32,52,46,52,53,42,55,41,47,51,41,49,46,51,48,47,58,47,51,50,46,49,49 │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────────────────────────────┘
Running benchmark twitter-lite-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark twitter-lite-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                        │
│         │ (Mount, Avg) │                                                                   │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────┤
│ 54.65   │ 3.1, 0.9     │ 59,60,59,60,59,60,59,58,59,58,55,59,57,46,53,50,46,43,41,37,38,38 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────┘

I short, it's hard to tell which is better than others, but generally all are good.

@theKashey
Copy link
Owner Author

🙅‍♂ current proxyShallowEqual is overall better for worst cases.
I will try to understand why my synthetic tests are so much faster than realty.
Let's extract walkTree and redo comparison.

@dai-shi
Copy link
Collaborator

dai-shi commented May 2, 2019

proxyequal fa66cca proxyShallowEqual
Results for benchmark deeptree-nested-useReduxState:
┌─────────┬──────────────┬──────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                           │
│         │ (Mount, Avg) │                                                                      │
├─────────┼──────────────┼──────────────────────────────────────────────────────────────────────┤
│ 50.65   │ 161.9, 0.5   │ 50,59,57,58,56,57,59,56,57,55,54,55,54,48,46,43,45,42,46,41,38,43,43 │
└─────────┴──────────────┴──────────────────────────────────────────────────────────────────────┘
Running benchmark deeptree-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                 │
│         │ (Mount, Avg) │                                                                            │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────────────────┤
│ 38.79   │ 80.7, 0.7    │ 49,46,47,50,48,46,47,46,45,47,43,50,47,30,29,30,28,27,28,29,28,29,24,21,21 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────────────────┘
Running benchmark forms-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark forms-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                        │
│         │ (Mount, Avg) │                                                                   │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────┤
│ 56.77   │ 1070.6, 0.3  │ 58,53,57,56,57,56,59,56,57,58,57,58,56,58,56,57,58,57,53,57,58,58 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────┘
Running benchmark stockticker-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark stockticker-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                            │
│         │ (Mount, Avg) │                                                       │
├─────────┼──────────────┼───────────────────────────────────────────────────────┤
│ 17.84   │ 289.9, 0.2   │ 18,21,20,19,20,19,18,17,16,17,18,17,16,17,16,17,16,16 │
└─────────┴──────────────┴───────────────────────────────────────────────────────┘
Running benchmark tree-view-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark tree-view-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                    │
│         │ (Mount, Avg) │                                                                               │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────────────────┤
│ 47.76   │ 691.0, 1.6   │ 49,34,52,43,44,33,49,48,51,52,50,44,55,38,50,46,49,51,47,54,53,49,50,47,49,49 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────────────────┘
Running benchmark twitter-lite-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark twitter-lite-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                 │
│         │ (Mount, Avg) │                                                                            │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────────────────┤
│ 56.02   │ 3.0, 0.9     │ 59,60,59,60,59,60,59,58,60,59,58,59,58,57,59,58,57,56,53,49,48,46,41,39,39 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────────────────┘
proxyequal 1c08661 proxyShallowEqual
Running benchmark deeptree-nested-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-nested-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                 │
│         │ (Mount, Avg) │                                                                            │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────────────────┤
│ 52.08   │ 173.6, 0.5   │ 57,59,57,58,56,59,58,57,56,55,54,56,54,56,50,46,43,48,47,44,46,45,44,42,42 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────────────────┘
Running benchmark deeptree-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                              │
│         │ (Mount, Avg) │                                                                         │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────────────────┤
│ 38.43   │ 99.3, 0.7    │ 44,46,48,44,47,45,47,41,47,46,48,45,47,36,28,26,29,28,29,28,29,28,21,21 │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────────────────┘
Running benchmark forms-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark forms-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                 │
│         │ (Mount, Avg) │                                                                            │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────────────────┤
│ 55.94   │ 1086.2, 0.3  │ 53,56,55,56,55,53,55,58,56,52,58,57,58,57,58,56,58,56,53,57,58,53,57,58,58 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────────────────┘
Running benchmark stockticker-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark stockticker-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                          │
│         │ (Mount, Avg) │                                     │
├─────────┼──────────────┼─────────────────────────────────────┤
│ 19.99   │ 322.1, 0.2   │ 20,22,21,20,19,20,19,20,19,20,19,19 │
└─────────┴──────────────┴─────────────────────────────────────┘
Running benchmark tree-view-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark tree-view-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                    │
│         │ (Mount, Avg) │                                                                               │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────────────────┤
│ 48.30   │ 692.1, 1.7   │ 49,38,52,44,45,34,48,53,54,47,55,42,54,38,52,46,51,58,48,53,52,47,49,37,54,54 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────────────────┘
Running benchmark twitter-lite-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark twitter-lite-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                        │
│         │ (Mount, Avg) │                                                                   │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────┤
│ 54.47   │ 6.8, 0.9     │ 60,59,60,59,60,59,60,57,58,59,56,59,58,48,52,51,46,44,42,37,36,36 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────┘

Basically you should expect around 5% error rate.

@theKashey
Copy link
Owner Author

Results for stockticker-useReduxState are much better

@dai-shi
Copy link
Collaborator

dai-shi commented May 3, 2019

From: dai-shi/reactive-react-redux#3 (comment)

Trying it.

proxyequal 1c08661 proxyShallowEqual
Running benchmark deeptree-nested-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-nested-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                    │
│         │ (Mount, Avg) │                                                                               │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────────────────┤
│ 52.38   │ 161.5, 0.5   │ 57,59,57,58,57,56,59,58,57,55,54,56,54,55,56,49,43,47,45,49,46,47,45,43,44,44 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────────────────┘
Running benchmark deeptree-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-useReduxState:
┌─────────┬──────────────┬──────────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                       │
│         │ (Mount, Avg) │                                                                                  │
├─────────┼──────────────┼──────────────────────────────────────────────────────────────────────────────────┤
│ 38.13   │ 86.8, 0.7    │ 45,46,47,44,45,43,44,46,41,47,44,43,48,47,37,27,28,29,28,29,28,29,28,27,28,23,23 │
└─────────┴──────────────┴──────────────────────────────────────────────────────────────────────────────────┘
Running benchmark forms-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark forms-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                        │
│         │ (Mount, Avg) │                                                                   │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────┤
│ 55.73   │ 1041.1, 0.3  │ 55,56,58,55,57,55,57,56,57,54,56,55,57,55,54,55,53,55,52,58,57,57 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────┘
Running benchmark stockticker-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark stockticker-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                          │
│         │ (Mount, Avg) │                                     │
├─────────┼──────────────┼─────────────────────────────────────┤
│ 19.85   │ 300.9, 0.2   │ 20,22,21,20,21,20,19,20,19,18,19,19 │
└─────────┴──────────────┴─────────────────────────────────────┘
Running benchmark tree-view-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark tree-view-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                          │
│         │ (Mount, Avg) │                                                                                     │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────────────────────────────┤
│ 50.04   │ 693.0, 1.7   │ 49,39,56,50,37,54,50,51,52,54,47,53,41,53,49,51,52,54,57,49,56,51,50,34,57,54,52,52 │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────────────────────────────┘
Running benchmark twitter-lite-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark twitter-lite-useReduxState:
┌─────────┬──────────────┬──────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                           │
│         │ (Mount, Avg) │                                                                      │
├─────────┼──────────────┼──────────────────────────────────────────────────────────────────────┤
│ 55.23   │ 4.3, 0.9     │ 59,60,59,60,58,60,59,60,58,59,60,57,54,58,59,60,59,50,47,45,44,36,36 │
└─────────┴──────────────┴──────────────────────────────────────────────────────────────────────┘
proxyequal 7c751f2 proxyShallowEqual
Running benchmark deeptree-nested-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-nested-useReduxState:
┌─────────┬──────────────┬──────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                           │
│         │ (Mount, Avg) │                                                                      │
├─────────┼──────────────┼──────────────────────────────────────────────────────────────────────┤
│ 51.09   │ 145.5, 0.6   │ 57,58,56,58,59,52,56,55,56,54,51,45,42,43,48,46,41,46,42,44,43,40,40 │
└─────────┴──────────────┴──────────────────────────────────────────────────────────────────────┘
Running benchmark deeptree-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                 │
│         │ (Mount, Avg) │                                                                            │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────────────────┤
│ 38.55   │ 89.9, 0.8    │ 42,43,45,49,46,43,47,48,43,46,50,49,45,48,46,34,28,29,27,30,27,29,28,22,22 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────────────────┘
Running benchmark forms-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark forms-useReduxState:
┌─────────┬──────────────┬──────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                           │
│         │ (Mount, Avg) │                                                                      │
├─────────┼──────────────┼──────────────────────────────────────────────────────────────────────┤
│ 56.91   │ 1109.7, 0.3  │ 57,58,57,58,57,58,57,56,58,57,58,55,56,58,57,58,55,57,56,57,56,58,58 │
└─────────┴──────────────┴──────────────────────────────────────────────────────────────────────┘
Running benchmark stockticker-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark stockticker-useReduxState:
┌─────────┬──────────────┬──────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                   │
│         │ (Mount, Avg) │                                              │
├─────────┼──────────────┼──────────────────────────────────────────────┤
│ 20.77   │ 346.5, 0.2   │ 23,22,21,20,21,22,21,20,19,21,20,21,19,20,20 │
└─────────┴──────────────┴──────────────────────────────────────────────┘
Running benchmark tree-view-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark tree-view-useReduxState:
┌─────────┬──────────────┬──────────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                       │
│         │ (Mount, Avg) │                                                                                  │
├─────────┼──────────────┼──────────────────────────────────────────────────────────────────────────────────┤
│ 49.11   │ 763.7, 1.8   │ 37,50,57,45,46,35,50,49,53,52,53,45,51,42,53,46,52,51,58,52,54,47,53,49,40,54,54 │
└─────────┴──────────────┴──────────────────────────────────────────────────────────────────────────────────┘
Running benchmark twitter-lite-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark twitter-lite-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                              │
│         │ (Mount, Avg) │                                                                         │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────────────────┤
│ 55.44   │ 3.6, 1.3     │ 60,59,60,59,60,59,58,60,59,60,56,59,58,59,60,52,51,52,48,47,40,42,38,38 │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────────────────┘

@theKashey
Copy link
Owner Author

But you lost "last affected" optimization. Even without it - results looking great(same).
Probably by mixing both approaches(using the old one only for memoization possibility tracking), we might achieve better results.

@dai-shi
Copy link
Collaborator

dai-shi commented May 3, 2019

But you lost "last affected" optimization.

I wasn't pretty sure if it's effectively implemented. Is keeping referential equality of trie important?

@theKashey
Copy link
Owner Author

...no, it's no longer needed. You are right.

@dai-shi
Copy link
Collaborator

dai-shi commented May 4, 2019

Changing if (la === lb || deepDeproxify(la) === deepDeproxify(lb)) {
to if (la === lb) {
gives me better results. But it can't be helped?


I guess the stockticker benchmark is faster with proxyEqual because of collectValuables.
That strikes me something: what if we cache the result of walk.

@dai-shi
Copy link
Collaborator

dai-shi commented May 4, 2019

proxyequal fd7533a proxyShallowEqual
Running benchmark deeptree-nested-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-nested-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                 │
│         │ (Mount, Avg) │                                                                            │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────────────────┤
│ 52.09   │ 172.1, 0.5   │ 51,59,58,59,55,56,57,55,56,58,56,51,45,47,50,49,46,49,43,47,46,47,41,47,47 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────────────────┘
Running benchmark deeptree-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                    │
│         │ (Mount, Avg) │                                                                               │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────────────────┤
│ 35.19   │ 93.3, 0.9    │ 42,47,45,34,45,39,37,43,37,32,43,47,43,36,41,40,38,40,29,24,23,24,26,30,25,25 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────────────────┘
Running benchmark forms-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark forms-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                    │
│         │ (Mount, Avg) │                                                                               │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────────────────┤
│ 54.41   │ 1159.7, 0.3  │ 55,54,55,53,55,54,53,54,55,57,56,54,53,57,56,52,54,57,56,54,52,47,48,57,58,58 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────────────────┘
Running benchmark stockticker-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark stockticker-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                    │
│         │ (Mount, Avg) │                                                                               │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────────────────┤
│ 32.21   │ 451.5, 0.2   │ 32,37,32,36,32,33,34,35,32,30,32,30,32,31,30,33,31,28,31,34,31,30,29,31,26,26 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────────────────┘
Running benchmark tree-view-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark tree-view-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                          │
│         │ (Mount, Avg) │                                                                                     │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────────────────────────────┤
│ 49.90   │ 842.1, 1.8   │ 36,52,58,48,43,36,55,52,53,50,56,42,56,42,48,49,51,52,55,58,51,57,46,52,37,56,51,51 │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────────────────────────────┘
Running benchmark twitter-lite-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark twitter-lite-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                 │
│         │ (Mount, Avg) │                                                                            │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────────────────┤
│ 53.04   │ 7.1, 1.2     │ 59,60,59,60,59,60,57,58,60,59,54,60,57,58,59,54,50,51,38,48,42,37,32,35,35 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────────────────┘

Stockticker is improved, more than 2.0.6 proxyEqual, but others are dropped.

This might require referential equality of trie, which is not implemented yet. (my naive trial was failed...)

@dai-shi
Copy link
Collaborator

dai-shi commented May 6, 2019

To use trie more efficient in reporting, we may need to pass parent node (or old and new nodes) in onKeyUsage instead of suffix. This would require too much refactoring and it might not work.

@dai-shi
Copy link
Collaborator

dai-shi commented May 6, 2019

proxyequal fd7533a proxyShallowEqual
Running benchmark deeptree-nested-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-nested-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                              │
│         │ (Mount, Avg) │                                                                         │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────────────────┤
│ 51.06   │ 160.0, 0.6   │ 58,57,58,55,44,56,54,56,58,54,56,50,44,46,44,49,48,46,45,44,45,39,45,45 │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────────────────┘
Running benchmark deeptree-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                    │
│         │ (Mount, Avg) │                                                                               │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────────────────┤
│ 38.37   │ 97.0, 0.8    │ 44,47,49,47,46,45,48,33,46,47,49,47,44,46,49,32,29,28,29,28,29,27,29,25,20,20 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────────────────┘
Running benchmark forms-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark forms-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                  │
│         │ (Mount, Avg) │                                                             │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────┤
│ 55.99   │ 1082.3, 0.3  │ 56,57,58,57,58,57,52,56,55,56,48,57,54,57,52,56,57,54,57,57 │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────┘
Running benchmark stockticker-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark stockticker-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                  │
│         │ (Mount, Avg) │                                                             │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────┤
│ 31.84   │ 338.3, 0.2   │ 34,33,35,36,34,33,32,31,32,30,32,31,30,31,30,28,29,31,29,29 │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────┘
Running benchmark tree-view-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark tree-view-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                          │
│         │ (Mount, Avg) │                                                                                     │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────────────────────────────┤
│ 48.84   │ 739.1, 1.8   │ 49,39,54,49,45,47,38,48,54,47,54,47,54,38,53,48,52,49,50,59,49,56,52,47,49,34,55,55 │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────────────────────────────┘
Running benchmark twitter-lite-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark twitter-lite-useReduxState:
┌─────────┬──────────────┬──────────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                       │
│         │ (Mount, Avg) │                                                                                  │
├─────────┼──────────────┼──────────────────────────────────────────────────────────────────────────────────┤
│ 54.84   │ 4.2, 1.2     │ 59,60,59,60,59,60,59,60,59,60,59,60,56,59,56,57,59,58,55,45,49,46,45,42,39,36,36 │
└─────────┴──────────────┴──────────────────────────────────────────────────────────────────────────────────┘
proxyequal e7f0ad0 proxyShallowEqual
Results for benchmark deeptree-nested-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                    │
│         │ (Mount, Avg) │                                                                               │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────────────────┤
│ 51.45   │ 146.6, 0.5   │ 59,58,57,59,58,60,57,56,57,56,57,54,48,46,45,48,45,46,49,44,43,40,43,44,41,41 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────────────────┘
Running benchmark deeptree-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                 │
│         │ (Mount, Avg) │                                                                            │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────────────────┤
│ 38.12   │ 93.8, 0.7    │ 44,47,48,46,44,46,34,46,45,48,45,47,46,48,44,35,28,29,28,27,28,27,28,21,21 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────────────────┘
Running benchmark forms-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark forms-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                     │
│         │ (Mount, Avg) │                                                                │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────┤
│ 56.90   │ 1129.8, 0.3  │ 56,57,58,57,58,57,54,58,57,54,56,60,56,54,57,58,57,58,54,58,58 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────┘
Running benchmark stockticker-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark stockticker-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                              │
│         │ (Mount, Avg) │                                                                         │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────────────────┤
│ 29.24   │ 280.0, 0.2   │ 29,33,32,31,32,31,33,30,31,29,31,29,27,29,27,29,28,29,28,29,24,26,27,27 │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────────────────┘
Running benchmark tree-view-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark tree-view-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                          │
│         │ (Mount, Avg) │                                                                                     │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────────────────────────────┤
│ 47.92   │ 660.3, 1.7   │ 49,32,55,52,41,48,35,50,52,50,53,41,47,53,43,46,49,52,49,50,56,49,56,53,46,47,32,32 │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────────────────────────────┘
Running benchmark twitter-lite-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark twitter-lite-useReduxState:
┌─────────┬──────────────┬────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                     │
│         │ (Mount, Avg) │                                                                │
├─────────┼──────────────┼────────────────────────────────────────────────────────────────┤
│ 52.69   │ 3.3, 0.8     │ 60,59,58,60,59,60,58,53,59,60,56,54,53,50,46,43,38,36,32,31,31 │
└─────────┴──────────────┴────────────────────────────────────────────────────────────────┘
proxyequal c78198a proxyShallowEqual
Running benchmark deeptree-nested-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-nested-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                        │
│         │ (Mount, Avg) │                                                                   │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────┤
│ 51.58   │ 130.8, 0.5   │ 59,57,58,57,56,54,56,53,54,49,47,46,47,45,48,46,45,46,43,39,45,45 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────┘
Running benchmark deeptree-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark deeptree-useReduxState:
┌─────────┬──────────────┬──────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                               │
│         │ (Mount, Avg) │                                                                          │
├─────────┼──────────────┼──────────────────────────────────────────────────────────────────────────┤
│ 37.99   │ 102.2, 0.8   │ 43,46,43,46,44,46,47,30,46,47,48,46,47,49,48,44,27,28,29,28,27,28,27,4,4 │
└─────────┴──────────────┴──────────────────────────────────────────────────────────────────────────┘
Running benchmark forms-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark forms-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                  │
│         │ (Mount, Avg) │                                                             │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────┤
│ 56.52   │ 1039.3, 0.3  │ 56,55,57,56,58,56,54,59,57,58,55,57,58,51,58,57,55,56,58,58 │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────┘
Running benchmark stockticker-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark stockticker-useReduxState:
┌─────────┬──────────────┬───────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                        │
│         │ (Mount, Avg) │                                                                   │
├─────────┼──────────────┼───────────────────────────────────────────────────────────────────┤
│ 30.62   │ 284.8, 0.2   │ 29,34,32,35,33,34,33,31,30,31,28,30,29,30,29,28,29,26,29,28,29,29 │
└─────────┴──────────────┴───────────────────────────────────────────────────────────────────┘
Running benchmark tree-view-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark tree-view-useReduxState:
┌─────────┬──────────────┬──────────────────────────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                                       │
│         │ (Mount, Avg) │                                                                                  │
├─────────┼──────────────┼──────────────────────────────────────────────────────────────────────────────────┤
│ 48.09   │ 675.9, 1.7   │ 50,36,53,56,40,47,34,50,52,50,47,45,55,41,46,49,48,50,51,56,47,54,52,48,45,42,42 │
└─────────┴──────────────┴──────────────────────────────────────────────────────────────────────────────────┘
Running benchmark twitter-lite-useReduxState
    Checking max FPS... (30 seconds)

Results for benchmark twitter-lite-useReduxState:
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────┐
│ Avg FPS │ Render       │ FPS Values                                                  │
│         │ (Mount, Avg) │                                                             │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────┤
│ 53.11   │ 4.2, 0.8     │ 59,60,59,60,59,58,57,59,55,59,58,56,48,49,47,40,38,37,33,33 │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────┘

@theKashey
Copy link
Owner Author

Results are almost identical.

@dai-shi
Copy link
Collaborator

dai-shi commented May 6, 2019

weakMemoizeWalk improves stockticker siginificantly, but slows down twitter-lite a bit.

@theKashey theKashey merged commit 5f45569 into master May 24, 2019
@theKashey theKashey deleted the flatten-shallow branch May 24, 2019 02:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants