Last active
November 30, 2022 06:49
-
-
Save joinr/204e556ab04546265a16d1949f213817 to your computer and use it in GitHub Desktop.
clone bench
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defn clone-assoc [obj k v] | |
(let [m (Object.assign #js{} obj)] | |
(aset m k v) | |
m)) | |
;;cljs.user> (def origin #js{"x" 1}) | |
;;#'cljs.user/origin | |
;;cljs.user> (clone-assoc origin "x" 2) | |
;;#js {:x 2} | |
;;cljs.user> origin | |
;;#js {:x 1} | |
(defn bench-them! [n & {:keys [reps] :or {reps 10000}}] | |
(let [m (zipmap (map str (range n)) (range n)) | |
obj (clj->js m)] | |
(println [:size n]) | |
(simple-benchmark [] | |
(do (assoc m "100" -1) nil) reps) | |
(simple-benchmark [] | |
(do (clone-assoc obj "100" -1) nil) reps))) | |
(defn sample! [] | |
(doseq [i (concat (range 1 21) (range 20 100 20) [200 300 400 500])] | |
(bench-them! i))) | |
(defn results->records [xs] | |
(for [[[_ size] | |
_ _ _ _ ares _ | |
_ _ _ _ cloneres _] (partition 13 xs)] | |
{"size" size "assoc(ms)" ares "clone(ms)" cloneres})) | |
(defn records->table [xs] | |
(let [headers (keys (first xs))] | |
(println (str "|" (clojure.string/join "|" headers) "|")) | |
(println (clojure.string/join "|" (repeat (count headers) ":--"))) | |
(doseq [x xs] | |
(println (str "|" (clojure.string/join "|" (vals x) ) "|"))))) | |
;;from browser repl in firefox. | |
;; cljs.user> (sample!) | |
;; [:size 1] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 4 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 4 msecs | |
;; [:size 2] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 2 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 4 msecs | |
;; [:size 3] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 2 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 6 msecs | |
;; [:size 4] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 1 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 5 msecs | |
;; [:size 5] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 3 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 6 msecs | |
;; [:size 6] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 3 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 6 msecs | |
;; [:size 7] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 3 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 8 msecs | |
;; [:size 8] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 47 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 8 msecs | |
;; [:size 9] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 8 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 8 msecs | |
;; [:size 10] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 9 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 9 msecs | |
;; [:size 11] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 9 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 9 msecs | |
;; [:size 12] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 9 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 11 msecs | |
;; [:size 13] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 8 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 11 msecs | |
;; [:size 14] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 8 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 10 msecs | |
;; [:size 15] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 9 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 13 msecs | |
;; [:size 16] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 9 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 12 msecs | |
;; [:size 17] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 9 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 15 msecs | |
;; [:size 18] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 8 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 14 msecs | |
;; [:size 19] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 8 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 16 msecs | |
;; [:size 20] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 9 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 16 msecs | |
;; [:size 20] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 9 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 16 msecs | |
;; [:size 40] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 6 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 28 msecs | |
;; [:size 60] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 7 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 40 msecs | |
;; [:size 80] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 8 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 51 msecs | |
;; [:size 200] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 9 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 124 msecs | |
;; [:size 300] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 9 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 274 msecs | |
;; [:size 400] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 10 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 345 msecs | |
;; [:size 500] | |
;; [], (do (assoc m "100" -1) nil), 10000 runs, 10 msecs | |
;; [], (do (clone-assoc obj "100" -1) nil), 10000 runs, 456 msecs | |
;;copied results into quoted vector, then | |
;;cljs.user> (-> results results->records records->table) | |
;;to get the formatted output. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|size|assoc(ms)|clone(ms)| | |
:--|:--|:-- | |
|1|4|4| | |
|2|2|4| | |
|3|2|6| | |
|4|1|5| | |
|5|3|6| | |
|6|3|6| | |
|7|3|8| | |
|8|47|8| | |
|9|8|8| | |
|10|9|9| | |
|11|9|9| | |
|12|9|11| | |
|13|8|11| | |
|14|8|10| | |
|15|9|13| | |
|16|9|12| | |
|17|9|15| | |
|18|8|14| | |
|19|8|16| | |
|20|9|16| | |
|20|9|16| | |
|40|6|28| | |
|60|7|40| | |
|80|8|51| | |
|200|9|124| | |
|300|9|274| | |
|400|10|345| | |
|500|10|456| |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment