Skip to content

Commit 049e421

Browse files
committed
[nop] Packer benching
1 parent 74d7cb9 commit 049e421

File tree

3 files changed

+87
-13
lines changed

3 files changed

+87
-13
lines changed

src/taoensso/sente.cljc

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@
8383
[taoensso.encore.timers :as timers]
8484
[taoensso.truss :as truss]
8585
[taoensso.trove :as trove]
86-
[taoensso.sente.interfaces :as i])
86+
[taoensso.sente.interfaces :as i]
87+
[taoensso.sente.packers.edn :as edn-packer])
8788

8889
#?(:cljs
8990
(:require-macros
@@ -179,14 +180,8 @@
179180

180181
;;;; Packing (see `i/IPacker2`)
181182

182-
(def ^:no-doc edn-packer
183-
"Sente packer that uses the EDN text format.
184-
A reasonable default choice."
185-
(reify i/IPacker2
186-
(pack [_ ws? clj cb-fn] (cb-fn {:value (enc/pr-edn clj)}))
187-
(unpack [_ ws? packed cb-fn] (cb-fn {:value (enc/read-edn packed)}))))
188-
189-
(defn- coerce-packer [x] (if (= x :edn) edn-packer (truss/have [:satisfies? i/IPacker2] x)))
183+
(def ^:no-doc edn-packer (edn-packer/get-packer))
184+
(defn- coerce-packer [x] (if (= x :edn) edn-packer (truss/have [:satisfies? i/IPacker2] x)))
190185

191186
(defn- on-packed [packer ws? clj ?cb-uuid error-fn value-fn]
192187
(truss/try*
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
(ns taoensso.sente.packers.edn
2+
{:author "Peter Taoussanis (@ptaoussanis)"}
3+
(:require
4+
[taoensso.encore :as enc]
5+
[taoensso.sente.interfaces :as i]))
6+
7+
(defn get-packer
8+
"Returns Sente packer that uses the EDN text format.
9+
A reasonable default choice for most users."
10+
[]
11+
(reify i/IPacker2
12+
(pack [_ ws? clj cb-fn] (cb-fn {:value (enc/pr-edn clj)}))
13+
(unpack [_ ws? packed cb-fn] (cb-fn {:value (enc/read-edn packed)}))))
14+
15+
(comment
16+
(let [p (get-packer)]
17+
(i/pack p :ws [:chsk/ws-ping "foo"]
18+
(fn [{packed :value}]
19+
(i/unpack p :ws packed
20+
(fn [{clj :value}] clj))))))

test/taoensso/sente_tests.cljc

Lines changed: 63 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,78 @@
1414
;; [clojure.test.check :as tc]
1515
;; [clojure.test.check.generators :as tc-gens]
1616
;; [clojure.test.check.properties :as tc-props]
17-
[clojure.string :as str]
17+
[clojure.string :as str]
18+
[taoensso.encore :as enc]
1819

1920
;; :cljs cannot compile taoensso.sente under :nodejs target
20-
#?(:clj [taoensso.sente :as sente])))
21+
#?(:clj [taoensso.sente :as sente])
22+
23+
[taoensso.sente.interfaces :as i]
24+
[taoensso.sente.packers.edn :as ep]
25+
[taoensso.sente.packers.transit :as tp]
26+
[taoensso.sente.packers.msgpack :as mp])
27+
28+
#?(:cljs
29+
(:require-macros
30+
[taoensso.sente-tests :refer [get-bench-data]])))
2131

2232
(comment
2333
(remove-ns 'taoensso.sente-tests)
2434
(test/run-tests 'taoensso.sente-tests))
2535

2636
;;;;
2737

28-
#?(:clj (deftest _test-clj (is (= 1 1))))
29-
#?(:cljs (deftest _test-cljs (is (= 1 1))))
38+
(defn get-bench-data []
39+
#_{:a :A :b :B :c "foo", :v (vec (range 128)), :s (set (range 128))}
40+
{:ids (vec (repeatedly 1024 (fn [] (rand-int 32767))))
41+
:data
42+
(vec
43+
(repeatedly 128
44+
(fn []
45+
{:children-types [(enc/uuid-str 8) (enc/uuid-str 8) (enc/uuid-str 8)]
46+
:description ""
47+
:tips nil
48+
:a-url-in-text nil
49+
:name (enc/uuid-str)
50+
:parents-ids nil
51+
:type-id 1
52+
:experimental false
53+
:duration 61
54+
:warnings nil
55+
:a-simple-string (enc/uuid-str 16)
56+
:a-double-number (rand 32767)
57+
:a-boolean-i-think-cant-recall nil
58+
:archive-date nil
59+
:another-number (rand-int 32767)
60+
:internal-notes nil
61+
:id (rand-int 32767)
62+
:a-boolean false
63+
:submit-date (str (enc/now-inst))
64+
:display-name (enc/uuid-str)
65+
:user nil
66+
:a-vector-of-integers (vec (repeatedly 64 (fn [] (rand-int 128))))
67+
:children-count (rand-int 1024)
68+
:a-usually-absent-string nil})))})
69+
70+
(defn packed-len [x]
71+
#?(:cljs (if (instance? js/Uint8Array x) (.-length x) (count x))
72+
:clj (count x)))
73+
74+
(defn bench1 [packer laps data]
75+
{:time (enc/qb laps (i/pack packer nil data (fn [x] (i/unpack packer nil (get x :value) (fn [y] (get y :value))))))
76+
:size (packed-len (i/pack packer nil data (fn [x] (get x :value))))})
77+
78+
(deftest bench-packers
79+
(let [laps 1e2
80+
bd (get-bench-data)
81+
ep (ep/get-packer)
82+
tp (tp/get-packer)
83+
mp (mp/get-packer)]
84+
85+
(println "Benching comparison:"
86+
{:ep (bench1 ep laps bd)
87+
:tp (bench1 tp laps bd)
88+
:mp (bench1 mp laps bd)})))
3089

3190
;;;;
3291

0 commit comments

Comments
 (0)