/
jmh.clj
48 lines (40 loc) · 1.69 KB
/
jmh.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
(ns jsonista.jmh
(:require [jsonista.core :as j]
[cheshire.core :as cheshire]
[clojure.data.json :as json]
[jsonista.tagged :as jt])
(:import (com.fasterxml.jackson.databind ObjectMapper)
(clojure.lang Keyword)))
(set! *warn-on-reflection* true)
;;
;; run with lein jmh '{:file "benchmarks.edn", :type :quick, :format :table}'
;; perf measured with the following setup:
;;
;; Model Name: MacBook Pro
;; Model Identifier: MacBookPro11,3
;; Processor Name: Intel Core i7
;; Processor Speed: 2,5 GHz
;; Number of Processors: 1
;; Total Number of Cores: 4
;; L2 Cache (per Core): 256 KB
;; L3 Cache: 6 MB
;; Memory: 16 GB
;;
(defn json-data [size] (slurp (str "dev-resources/json" size ".json")))
(defn edn-data [size] (cheshire/parse-string (json-data size)))
(defn encode-data-json [x] (json/write-str x))
(defn decode-data-json [x] (json/read-str x))
(defn encode-cheshire [x] (cheshire/generate-string x))
(defn decode-cheshire [x] (cheshire/parse-string x))
(defn encode-jsonista [x] (j/write-value-as-string x))
(defn decode-jsonista [x] (j/read-value x))
(let [mapper (ObjectMapper.)]
(defn encode-jackson [x] (.writeValueAsString mapper x))
(defn decode-jackson [x] (.readValue mapper ^String x ^Class Object)))
(let [mapper (j/object-mapper
{:modules [(jt/module
{:handlers {Keyword {:tag "!k"
:encode jt/encode-keyword
:decode keyword}}})]})]
(defn encode-jsonista [x] (j/write-value-as-string x mapper))
(defn decode-jsonista [x] (j/read-value x mapper)))