From 3154ed7b386b0a1429c2eafdfb56d093999acf0c Mon Sep 17 00:00:00 2001 From: gered Date: Wed, 29 Dec 2021 18:59:17 -0500 Subject: [PATCH] add criterium benchmarks for future improvements/comparisons --- project.clj | 3 +- test/aging_session/performance.clj | 58 ++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 test/aging_session/performance.clj diff --git a/project.clj b/project.clj index acf7677..3ef0b2b 100644 --- a/project.clj +++ b/project.clj @@ -10,7 +10,8 @@ {:dependencies [[org.clojure/clojure "1.10.0"]]} :dev - {:dependencies [[pjstadig/humane-test-output "0.11.0"]] + {:dependencies [[criterium "0.4.6"] + [pjstadig/humane-test-output "0.11.0"]] :injections [(require 'pjstadig.humane-test-output) (pjstadig.humane-test-output/activate!)]}} diff --git a/test/aging_session/performance.clj b/test/aging_session/performance.clj new file mode 100644 index 0000000..582ae0d --- /dev/null +++ b/test/aging_session/performance.clj @@ -0,0 +1,58 @@ +(ns aging-session.performance + (:require + [clojure.test :refer :all] + [criterium.core :refer [quick-bench]] + [ring.middleware.session.store :refer :all] + [ring.middleware.session.memory :refer [memory-store]] + [aging-session.event :as event] + [aging-session.memory :refer [aging-memory-store]])) + +; these are copied from ring-ttl-session's benchmarks so that i can see how the performance of +; aging-session compares against it. +; https://github.com/boechat107/ring-ttl-session/blob/develop/test/ring_ttl_session/performance.clj +; +; right now aging-session is slower than ExpiringMap (to be expected, honestly...), but generally faster than +; ring-ttl-session's core.cache implementation. but there are still things that we can do to speed up aging-session. + +(defn ->aging-memory-store + [ttl] + (aging-memory-store + :refresh-on-write true + :refresh-on-read true + :events [(event/expires-after ttl)])) + +(defn check-nonexistent-read + [] + (let [aging (->aging-memory-store 10) + mem (memory-store)] + (println \newline "*** AGING-SESSION ***" \newline) + (quick-bench (read-session aging "nonexistent")) + (println \newline "*** MEMORY-STORE ***" \newline) + (quick-bench (read-session mem "nonexistent")))) + +#_(check-nonexistent-read) + +(defn check-session-read + [] + (let [aging (->aging-memory-store 10) + mem (memory-store) + data {:foo "bar"} + aging-key (write-session aging nil data) + mem-key (write-session mem nil data)] + (println \newline "*** AGING-SESSION ***" \newline) + (quick-bench (read-session aging aging-key)) + (println \newline "*** MEMORY-STORE ***" \newline) + (quick-bench (read-session mem mem-key)))) + +#_(check-session-read) + +(defn check-session-create [] + (let [aging (->aging-memory-store 10) + mem (memory-store) + data {:foo "bar"}] + (println \newline "*** AGING-SESSION ***" \newline) + (quick-bench (write-session aging nil data)) + (println \newline "*** MEMORY-STORE ***" \newline) + (quick-bench (write-session mem nil data)))) + +#_(check-session-create)