clojure-erlastic
clojure-erlastic copied to clipboard
Remove reflection warnings and use Protocols for encoding/decoding
With these changes, encode & decode is about 4 times faster.
I testes this code using criterium.
(use 'criterium.core)
(require '[clojure-erlastic.core :as c])
(def conf {:str-detect :none :convention :elixir :str-autodetect-len 10})
(def encode #(c/encode % conf))
(def decode #(c/decode % conf))
(defn f
[]
(-> :toto encode decode)
(-> {:a :b :c :d} encode decode)
(-> [:a :b :c :d] encode decode)
(-> '(:a :b :c :d) encode decode)
(-> #{:a :b :c :d} encode decode)
(-> 4.3 encode decode)
(-> true encode decode)
(-> (byte-array (repeat 4 0)) encode decode)
(-> nil encode decode)
(-> \c encode decode)
(-> "toto" encode decode)
nil)
(bench (f))
Before:
Evaluation count : 893640 in 60 samples of 14894 calls.
Execution time mean : 72.383461 µs
Execution time std-deviation : 5.949103 µs
Execution time lower quantile : 65.927145 µs ( 2.5%)
Execution time upper quantile : 83.833648 µs (97.5%)
Overhead used : 6.592387 ns
After:
Evaluation count : 3893340 in 60 samples of 64889 calls.
Execution time mean : 15.769601 µs
Execution time std-deviation : 394.241150 ns
Execution time lower quantile : 15.214134 µs ( 2.5%)
Execution time upper quantile : 16.606512 µs (97.5%)
Overhead used : 6.282802 ns