get-in*
performance improved substantially across many conditions with version 5.
See the overall summary for benchmarking details. The benchmarks displayed in this document are defined here.
Version 5's get-in*
performs 43‑49% faster than clojure.core/get-in
for this hashmap scenario.
arg, n | ||||||
---|---|---|---|---|---|---|
version | 1 | 2 | 3 | 4 | 5 | 6 |
4 | 1.2e-07±1.0e-09 | 2.4e-07±1.0e-09 | 3.7e-07±1.6e-09 | 4.9e-07±6.4e-09 | 6.1e-07±1.9e-08 | 7.0e-07±1.9e-08 |
5 | 1.2e-07±1.5e-09 | 2.4e-07±2.2e-09 | 3.6e-07±3.4e-09 | 4.9e-07±7.9e-09 | 5.8e-07±6.6e-09 | 7.0e-07±7.3e-09 |
arg, n | ||||||
---|---|---|---|---|---|---|
version | 1 | 2 | 3 | 4 | 5 | 6 |
4 | 1.0e-07±2.0e-09 | 3.9e-07±1.3e-09 | 6.1e-07±2.9e-09 | 7.9e-07±8.0e-09 | 9.8e-07±7.4e-09 | 1.1e-06±4.6e-09 |
5 | 6.9e-08±1.2e-09 | 1.4e-07±2.9e-09 | 2.0e-07±3.3e-09 | 2.5e-07±3.4e-09 | 3.0e-07±1.2e-09 | 3.4e-07±2.0e-09 |
Version 5's get-in*
with protocol type dispatch performs about 35% faster than version 4 on lists.
arg, n | ||||
---|---|---|---|---|
version | 1 | 2 | 3 | 4 |
4 | 2.6e-07±1.7e-09 | 5.1e-07±2.7e-09 | 7.6e-07±3.5e-09 | 1.0e-06±6.0e-09 |
5 | 1.7e-07±4.0e-10 | 3.2e-07±2.4e-09 | 4.9e-07±8.6e-09 | 6.6e-07±7.6e-09 |
Version 5 performs about 36% faster for sequences.
arg, n | ||||||
---|---|---|---|---|---|---|
version | 1 | 2 | 3 | 4 | 5 | 6 |
4 | 2.5e-07±1.7e-09 | 4.8e-07±8.6e-09 | 7.2e-07±2.3e-09 | 9.8e-07±1.4e-08 | 1.2e-06±1.7e-08 | 1.5e-06±6.7e-09 |
5 | 1.6e-07±8.1e-10 | 3.0e-07±9.4e-10 | 4.5e-07±2.0e-09 | 6.0e-07±4.3e-09 | 7.8e-07±7.9e-09 | 9.6e-07±1.0e-08 |
The top two panels are curious: while the clojure.core/get
implementation didn't change, the benchmarks run after the
library's bump to version 5 showed up to 14% slower performance. One possible interpretation is that the performance improvements
demonstrated by get-in*
is understated.
Regardless, get-in*
performance substantially improved for both patterns of nested vectors, improving by about 70% relative to
version 4, and narrowing the performance gap with clojure.core/get-in
in the worst case, and bettering it in the best case.
arg, n | ||||||
---|---|---|---|---|---|---|
version | 1 | 10 | 100 | 1000 | 10000 | 100000 |
4 | 2.1e-07±4.8e-10 | 2.9e-07±1.6e-09 | 3.1e-07±1.1e-09 | 3.2e-07±2.8e-09 | 3.4e-07±4.5e-09 | 3.6e-07±8.4e-09 |
5 | 2.2e-07±2.8e-09 | 3.1e-07±4.5e-09 | 3.4e-07±2.2e-09 | 3.6e-07±3.6e-09 | 3.9e-07±6.1e-09 | 4.1e-07±4.0e-09 |
arg, n | ||||||
---|---|---|---|---|---|---|
version | 1 | 2 | 3 | 4 | 5 | 6 |
4 | 1.0e-07±1.9e-09 | 1.7e-07±5.0e-10 | 2.4e-07±1.0e-09 | 3.3e-07±1.8e-09 | 4.1e-07±8.6e-09 | 4.9e-07±7.8e-09 |
5 | 1.0e-07±3.8e-10 | 1.8e-07±9.3e-10 | 2.7e-07±2.6e-09 | 3.6e-07±5.0e-09 | 4.4e-07±2.3e-09 | 5.2e-07±2.2e-09 |
arg, n | ||||||
---|---|---|---|---|---|---|
version | 1 | 10 | 100 | 1000 | 10000 | 100000 |
4 | 9.2e-07±8.7e-09 | 1.0e-06±6.7e-09 | 1.0e-06±8.9e-09 | 1.1e-06±4.8e-09 | 1.1e-06±5.9e-09 | 1.1e-06±5.5e-09 |
5 | 3.2e-07±1.1e-09 | 3.4e-07±1.3e-09 | 3.6e-07±3.1e-09 | 4.0e-07±5.3e-09 | 4.2e-07±4.3e-09 | 4.4e-07±8.3e-10 |
arg, n | ||||||
---|---|---|---|---|---|---|
version | 1 | 2 | 3 | 4 | 5 | 6 |
4 | 1.8e-07±8.6e-10 | 3.3e-07±1.7e-09 | 5.0e-07±6.2e-10 | 6.7e-07±3.5e-09 | 7.8e-07±3.5e-09 | 9.8e-07±7.3e-09 |
5 | 5.5e-08±9.9e-10 | 8.7e-08±8.3e-10 | 1.2e-07±3.1e-10 | 1.5e-07±2.5e-09 | 1.8e-07±2.3e-09 | 2.2e-07±8.2e-10 |
Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
Ctrl+k | Jump to recent docs |
← | Move to previous article |
→ | Move to next article |
Ctrl+/ | Jump to the search field |