immer
immer copied to clipboard
Faster iteration experiment
Object.keys is faster than Reflect.keys. Can we leverage this somehow? (at the cost of symbol props etc) https://www.measurethat.net/Benchmarks/Show/18717/0/reflectownkeys-vs-objectkeys-preformence#latest_results_block
FWIW, I've actually been doing some RTK perf optimizations over in https://github.com/reduxjs/redux-toolkit/pull/4361#issuecomment-2071038122 , and found that 1) it was faster to do some reads on a const ids = current(state.ids) array instead of a wrapped array, 2) the majority of the remaining overhead seems to be in Immer, 3) a lot of it looks like it's in finalizeProperties
See also https://github.com/immerjs/immer/pull/1107. There are several ways to make Immer quite a bit faster, but it would required much more loosely treating things that have getters/ non-enumerables / symbolic properties, which would benefit the majority of the user base, but also create enough failure scenarios to flood the issue tracker😅
@mweststrate out of curiosity, how much of a perf difference do you think this will make?
FWIW it looks like only one test failed:
FAIL __tests__/base.js
● Test suite failed to run
TypeError: Cannot perform 'get' on a proxy that has been revoked
2379 | })
2380 |
> 2381 | expect(state[sym].x).toBe(2)
| ^
2382 | })
2383 | }
2384 |
at __tests__/base.js:2381:21
at testObjectTypes (__tests__/base.js:2368:2)
at __tests__/base.js:1861:28
at __tests__/base.js:1860:3
at runBaseTest (__tests__/base.js:61:2)
at Object.<anonymous> (__tests__/base.js:32:4)
@Pyaepyae-art please stop randomly approving draft or merged PRs. I'm not sure why you are doing this. I hope it is unintentional. But just in case, on the next contextless review you will be banned from the repo.