theKashey / proxyequal

There is a bit more smart way to compare things, than a shallow equal.
MIT License
72 stars 7 forks source link

try faster shallowEqual #17

Closed theKashey closed 5 years ago

theKashey commented 5 years ago

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

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.

dai-shi commented 5 years ago
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 fa66ccaf1f34adf8b12b32928f8473961250098b 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 commented 5 years ago

🙅‍♂ 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 commented 5 years ago
proxyequal fa66ccaf1f34adf8b12b32928f8473961250098b 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 1c08661d7651fe4e6355d1fa2f619b90bd47f3dc 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 commented 5 years ago

Results for stockticker-useReduxState are much better

dai-shi commented 5 years ago

From: https://github.com/dai-shi/reactive-react-redux/issues/3#issuecomment-488847121

Trying it.

proxyequal 1c08661d7651fe4e6355d1fa2f619b90bd47f3dc 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 7c751f2aed8f0f08bd429b70d62ea4ed29a88a49 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 commented 5 years ago

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 commented 5 years ago

But you lost "last affected" optimization.

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

theKashey commented 5 years ago

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

dai-shi commented 5 years ago

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 commented 5 years ago
proxyequal fd7533a2e54512775111da46a6733b9040f43949 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 commented 5 years ago

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 commented 5 years ago
proxyequal fd7533a2e54512775111da46a6733b9040f43949 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 e7f0ad0698741b3447877e1268669bc85853dee2 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 c78198ac52d13513984057f1831290b71955deb7 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 commented 5 years ago

Results are almost identical.

dai-shi commented 5 years ago

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