Current implementation of cljs.core/distinct uses persistent set. This patch improves performance by ~10%-33% by using transient map instead. Mirror Clojure task CLJ-2090
10 elements
(reduce + 0 (distinct coll)) 12.360220502805724 µs => 9.504153281757874 µs (-23%)
(transduce (distinct) + 0 coll) 7.689213711227641 µs => 5.3549045227207 µs (-30%)
100 elements
(reduce + 0 (distinct coll)) 136.43424283765356 µs => 106.66990187713321 µs (-21%)
(transduce (distinct) + 0 coll) 73.05427319211107 µs => 48.737280701754386 µs (-33%)
1000 elements
(reduce + 0 (distinct coll)) 1.1207102908277415 ms => 919.8952205882359 µs (-17%)
(transduce (distinct) + 0 coll) 677.2834912043312 µs => 482.79681467181547 µs (-28%)
10000 elements
(reduce + 0 (distinct coll)) 4.777295238095228 ms => 4.3203448275862115 ms (-9%)
(transduce (distinct) + 0 coll) 2.889020114942531 ms => 2.44890487804879 ms (-15%)
Benchmarking code:
https://gist.github.com/tonsky/258c3d715e6a485522f7ba5e663624fd