-
Notifications
You must be signed in to change notification settings - Fork 23
Open
Description
Problem:
Writing a large object to a file with transit-clj was slower than I expected. It takes about 1 second with transit-clj and roughly 1/10th of that time with regular spit.
Test data:
test.edn.zip
Extract to test.edn.
Repro:
clj -Sdeps '{:deps {com.cognitect/transit-clj {:mvn/version "0.8.313"}}}'
(require '[clojure.edn :as edn])
(def edn (edn/read-string (slurp "test.edn")))
(count (keys edn)) ;;=> 799
(require '[cognitect.transit :as transit])
(require '[clojure.java.io :as io])
(def writer (transit/writer (io/output-stream (io/file "transit.json")) :json))
(time (transit/write writer edn)) ;; prints:
"Elapsed time: 1151.116438 msecs"
While writing the same EDN to a file (printing with str is much faster):
(time (with-open [fos (java.io.FileOutputStream. "/tmp/foo.edn")] (let [w (io/writer fos)] (.write w (str edn)) (.flush fos)))) ;; prints:
"Elapsed time: 73.316135 msecs"
Flamegraphs
Created with https://github.com/clojure-goes-fast/clj-async-profiler
Flamegraph of transit:
transit-flamegraph.svg.zip
Flamegraph of EDN to file:
edn-flamegraph.svg.zip
Metadata
Metadata
Assignees
Labels
No labels