"... and n is usually small" (from Rob Pike's 3rd rule of programming)
x/into currently has a performance problem when from is a map due to x/kvreducible? doing a satisfies? check which is currently relatively slow.
For large maps (as in the examples in the readme) the benefits outweigh the perf hit but for small maps x/into performs much worse than plain into. In the following benchmark (examples taken from the lib's readme), using x/into means rougly a x10 execution time for a 10-key map and x2 for a 100-key map.
(Using criterium with some custom reporting to produce a markdown table)
x/into
currently has a performance problem whenfrom
is a map due tox/kvreducible?
doing asatisfies?
check which is currently relatively slow.For large maps (as in the examples in the readme) the benefits outweigh the perf hit but for small maps
x/into
performs much worse than plaininto
. In the following benchmark (examples taken from the lib's readme), usingx/into
means rougly a x10 execution time for a 10-key map and x2 for a 100-key map.(Using criterium with some custom reporting to produce a markdown table)
Benchmarks with Clojure 1.11 and 1.10:
Std dev : 24.861988 ns
Std dev : 317.645395 ns
Std dev : 525.675706 ns
Std dev : 1.259576 µs
Std dev : 3.289248 µs
Std dev : 1.270464 ms
Std dev : 20.402502 ns
Std dev : 138.617196 ns
Std dev : 416.586450 ns
Std dev : 546.905266 ns
Std dev : 851.322308 ns
Std dev : 489.532061 µs
Std dev : 47.451763 ns
Std dev : 163.565320 ns
Std dev : 448.219432 ns
Std dev : 651.510255 ns
Std dev : 1.789141 µs
Std dev : 454.901954 µs
Std dev : 146.613406 ns
Std dev : 698.227692 ns
Std dev : 714.131155 ns
Std dev : 851.546315 ns
Std dev : 1.271434 µs
Std dev : 341.449485 µs
Std dev : 30.500522 ns
Std dev : 155.138059 ns
Std dev : 316.817925 ns
Std dev : 1.210076 µs
Std dev : 4.449719 µs
Std dev : 827.855967 µs
Std dev : 10.706939 ns
Std dev : 274.215662 ns
Std dev : 401.741516 ns
Std dev : 667.340516 ns
Std dev : 694.415295 ns
Std dev : 612.973823 µs
Std dev : 26.532268 ns
Std dev : 202.769162 ns
Std dev : 646.563150 ns
Std dev : 454.634040 ns
Std dev : 703.122080 ns
Std dev : 572.705985 µs
Std dev : 151.339935 ns
Std dev : 279.121684 ns
Std dev : 651.817443 ns
Std dev : 110.424603 ns
Std dev : 2.621397 µs
Std dev : 441.365143 µs