Closed sverweij closed 7 months ago
Code Climate has analyzed commit 39a4942c and detected 0 issues on this pull request.
View more on Code Climate.
New dependencies detected. Learn more about Socket for GitHub ↗︎
Package | New capabilities | Transitives | Size | Publisher |
---|---|---|---|---|
npm/memoize@10.0.0 | None | +1 |
26.5 kB | sindresorhus |
Description
lodash/memoize
withmemoize
Motivation and Context
We should slowly be starting to replace lodash functions everywhere as lodash isn't really maintained anymore. Additionally
lodash/memoize
isn't the fastest memoization function around, it looks like.The chosen alternative (
memoize
, formerly known asmem
) isn't the fastest either, butOther candidates either have fallen out of maintenance (e.g. 10y without updates, ...), or miss features we need.
Speed benchmarks adopted from `memize` (who adopted from them in turn from `moize`):
- run on MacOS 12.7.4 on an 2,6Ghz Quad-Core Intel Core i7 with 16Gb RAM - See https://github.com/aduth/memize/tree/master/benchmark for details - The benchmark this ran was (1) adapted to run as ESM (2) adds lodash/memoize #### Single parameter ```text ┌────────────────────┬─────────────┬──────────────────────────┬─────────────┐ │ Name │ Ops / sec │ Relative margin of error │ Sample size │ ├────────────────────┼─────────────┼──────────────────────────┼─────────────┤ │ fast-memoize │ 127,482,919 │ ± 0.28% │ 94 │ ├────────────────────┼─────────────┼──────────────────────────┼─────────────┤ │ moize │ 101,448,279 │ ± 0.16% │ 94 │ ├────────────────────┼─────────────┼──────────────────────────┼─────────────┤ │ memoize │ 89,864,460 │ ± 0.15% │ 96 │ ├────────────────────┼─────────────┼──────────────────────────┼─────────────┤ │ memize │ 75,527,611 │ ± 1.16% │ 93 │ ├────────────────────┼─────────────┼──────────────────────────┼─────────────┤ │ lodash │ 50,176,290 │ ± 0.24% │ 95 │ ├────────────────────┼─────────────┼──────────────────────────┼─────────────┤ │ ramda │ 48,060,225 │ ± 0.54% │ 94 │ ├────────────────────┼─────────────┼──────────────────────────┼─────────────┤ │ underscore │ 30,460,634 │ ± 0.42% │ 93 │ ├────────────────────┼─────────────┼──────────────────────────┼─────────────┤ │ memoizee │ 18,648,393 │ ± 0.51% │ 93 │ ├────────────────────┼─────────────┼──────────────────────────┼─────────────┤ │ moize (serialized) │ 16,516,070 │ ± 0.25% │ 92 │ ├────────────────────┼─────────────┼──────────────────────────┼─────────────┤ │ memoizerific │ 9,432,079 │ ± 0.97% │ 92 │ ├────────────────────┼─────────────┼──────────────────────────┼─────────────┤ │ memoizejs │ 1,610,735 │ ± 0.28% │ 94 │ └────────────────────┴─────────────┴──────────────────────────┴─────────────┘ ``` #### Multiple parameters, only primitives ```text ┌────────────────────┬────────────┬──────────────────────────┬─────────────┐ │ Name │ Ops / sec │ Relative margin of error │ Sample size │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ moize │ 32,944,874 │ ± 3.55% │ 79 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ memize │ 32,530,910 │ ± 2.19% │ 65 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ memoizee │ 11,358,939 │ ± 2.89% │ 90 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ memoize │ 9,380,007 │ ± 1.55% │ 88 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ moize (serialized) │ 8,536,549 │ ± 0.47% │ 90 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ memoizerific │ 5,622,282 │ ± 1.19% │ 91 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ lodash │ 5,393,388 │ ± 0.73% │ 92 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ memoizejs │ 1,101,890 │ ± 1.10% │ 92 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ fast-memoize │ 929,638 │ ± 0.22% │ 95 │ └────────────────────┴────────────┴──────────────────────────┴─────────────┘ ``` #### Multiple parameters, some parameters contain objects ```plaintext ┌────────────────────┬────────────┬──────────────────────────┬─────────────┐ │ Name │ Ops / sec │ Relative margin of error │ Sample size │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ memize │ 30,529,321 │ ± 0.97% │ 89 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ moize │ 28,842,916 │ ± 0.77% │ 91 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ memoizee │ 10,445,895 │ ± 1.02% │ 92 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ memoize │ 9,349,388 │ ± 0.50% │ 93 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ memoizerific │ 6,107,483 │ ± 1.29% │ 92 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ lodash │ 5,029,315 │ ± 0.36% │ 92 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ memoizejs │ 808,879 │ ± 2.71% │ 94 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ moize (serialized) │ 796,306 │ ± 1.73% │ 88 │ ├────────────────────┼────────────┼──────────────────────────┼─────────────┤ │ fast-memoize │ 650,625 │ ± 3.18% │ 88 │ └────────────────────┴────────────┴──────────────────────────┴─────────────┘ ```How Has This Been Tested?
Types of changes
Checklist
[x] :book:
[x] :balance_scale: