mirror of
https://github.com/metosin/reitit.git
synced 2026-02-14 15:25:16 +00:00
perf tests
This commit is contained in:
parent
4d797d0b5d
commit
eeed8576da
1 changed files with 16 additions and 21 deletions
|
|
@ -5,6 +5,8 @@
|
||||||
[reitit.interceptor :as interceptor]
|
[reitit.interceptor :as interceptor]
|
||||||
|
|
||||||
reitit.chain
|
reitit.chain
|
||||||
|
sieppari.queue
|
||||||
|
sieppari.core
|
||||||
io.pedestal.interceptor
|
io.pedestal.interceptor
|
||||||
io.pedestal.interceptor.chain))
|
io.pedestal.interceptor.chain))
|
||||||
|
|
||||||
|
|
@ -34,12 +36,12 @@
|
||||||
(def +items+ 10)
|
(def +items+ 10)
|
||||||
|
|
||||||
(defn expected! [x]
|
(defn expected! [x]
|
||||||
(assert (= (range +items+) (:values x))))
|
(println x)
|
||||||
|
#_(assert (= (range +items+) (:values x))))
|
||||||
|
|
||||||
(defn middleware [handler value]
|
(defn middleware [handler value]
|
||||||
(fn [request]
|
(fn [request]
|
||||||
(let [values (or (:values request) [])]
|
(handler request)))
|
||||||
(handler (assoc request :values (conj values value))))))
|
|
||||||
|
|
||||||
(def map-request {})
|
(def map-request {})
|
||||||
(def record-request (map->RequestOrContext map-request))
|
(def record-request (map->RequestOrContext map-request))
|
||||||
|
|
@ -49,18 +51,21 @@
|
||||||
app (middleware/chain mw identity)]
|
app (middleware/chain mw identity)]
|
||||||
|
|
||||||
;; 1000ns
|
;; 1000ns
|
||||||
|
;; 18ns (identity)
|
||||||
(title "middleware - map")
|
(title "middleware - map")
|
||||||
(expected! (app map-request))
|
(expected! (app map-request))
|
||||||
(cc/quick-bench
|
(cc/quick-bench
|
||||||
(app map-request))
|
(app map-request))
|
||||||
|
|
||||||
;; 365ns
|
;; 365ns
|
||||||
|
;; 21ns (identity)
|
||||||
(title "middleware - record")
|
(title "middleware - record")
|
||||||
(expected! (app record-request))
|
(expected! (app record-request))
|
||||||
(cc/quick-bench
|
(cc/quick-bench
|
||||||
(app record-request))
|
(app record-request))
|
||||||
|
|
||||||
;; 6900ns
|
;; 6900ns
|
||||||
|
;; 10000ns (identity)
|
||||||
(title "middleware - dynamic")
|
(title "middleware - dynamic")
|
||||||
(expected! ((middleware/chain mw identity) record-request))
|
(expected! ((middleware/chain mw identity) record-request))
|
||||||
(cc/quick-bench
|
(cc/quick-bench
|
||||||
|
|
@ -70,10 +75,7 @@
|
||||||
(let [interceptors (conj
|
(let [interceptors (conj
|
||||||
(mapv
|
(mapv
|
||||||
(fn [value]
|
(fn [value]
|
||||||
{:enter (fn [ctx]
|
{:enter identity})
|
||||||
(let [request (:request ctx)
|
|
||||||
values (conj (or (:values request) []) value)]
|
|
||||||
(assoc ctx :request (assoc request :values values))))})
|
|
||||||
(range +items+))
|
(range +items+))
|
||||||
identity)
|
identity)
|
||||||
queue (sieppari.queue/into-queue interceptors)
|
queue (sieppari.queue/into-queue interceptors)
|
||||||
|
|
@ -81,24 +83,28 @@
|
||||||
app2 (fn [req] (sieppari.core/execute queue req))]
|
app2 (fn [req] (sieppari.core/execute queue req))]
|
||||||
|
|
||||||
;; 5500ns
|
;; 5500ns
|
||||||
|
;; 4000ns (identity)
|
||||||
(title "sieppari - map")
|
(title "sieppari - map")
|
||||||
(expected! (app map-request))
|
(expected! (app map-request))
|
||||||
(cc/quick-bench
|
(cc/quick-bench
|
||||||
(app map-request))
|
(app map-request))
|
||||||
|
|
||||||
;; 4600ns
|
;; 4600ns
|
||||||
|
;; 3800ns (identity)
|
||||||
(title "sieppari - record")
|
(title "sieppari - record")
|
||||||
(expected! (app record-request))
|
(expected! (app record-request))
|
||||||
(cc/quick-bench
|
(cc/quick-bench
|
||||||
(app record-request))
|
(app record-request))
|
||||||
|
|
||||||
;; 2200ns
|
;; 2200ns
|
||||||
|
;; 1300ns (identity)
|
||||||
(title "sieppari - map (compiled queue)")
|
(title "sieppari - map (compiled queue)")
|
||||||
(expected! (app2 map-request))
|
(expected! (app2 map-request))
|
||||||
(cc/quick-bench
|
(cc/quick-bench
|
||||||
(app2 map-request))
|
(app2 map-request))
|
||||||
|
|
||||||
;; 1600ns
|
;; 1600ns
|
||||||
|
;; 1300ns (identity)
|
||||||
(title "sieppari - record (compiled queue)")
|
(title "sieppari - record (compiled queue)")
|
||||||
(expected! (app2 record-request))
|
(expected! (app2 record-request))
|
||||||
(cc/quick-bench
|
(cc/quick-bench
|
||||||
|
|
@ -147,25 +153,15 @@
|
||||||
(defn pedestal-chain-text []
|
(defn pedestal-chain-text []
|
||||||
(let [is (map io.pedestal.interceptor/interceptor
|
(let [is (map io.pedestal.interceptor/interceptor
|
||||||
(map (fn [value]
|
(map (fn [value]
|
||||||
{:enter (interceptor value)}) (range +items+)))
|
{:enter identity}) (range +items+)))
|
||||||
ctx (io.pedestal.interceptor.chain/enqueue nil is)]
|
ctx (io.pedestal.interceptor.chain/enqueue nil is)]
|
||||||
|
|
||||||
;; 8400ns
|
;; 8400ns
|
||||||
|
;; 7200ns (identity)
|
||||||
(title "pedestal")
|
(title "pedestal")
|
||||||
(cc/quick-bench
|
(cc/quick-bench
|
||||||
(io.pedestal.interceptor.chain/execute ctx))))
|
(io.pedestal.interceptor.chain/execute ctx))))
|
||||||
|
|
||||||
#_(defn pedestal-tuned-chain-text []
|
|
||||||
(let [is (map io.pedestal.interceptor/interceptor
|
|
||||||
(map (fn [value]
|
|
||||||
{:enter (interceptor value)}) (range +items+)))
|
|
||||||
ctx (reitit.chain/map->Context (reitit.chain/enqueue nil is))]
|
|
||||||
|
|
||||||
;; 67 µs
|
|
||||||
(title "pedestal - tuned")
|
|
||||||
(cc/quick-bench
|
|
||||||
(reitit.chain/execute ctx))))
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; Naive chain
|
;; Naive chain
|
||||||
;;
|
;;
|
||||||
|
|
@ -280,7 +276,6 @@
|
||||||
(middleware-test)
|
(middleware-test)
|
||||||
(sieppari-test)
|
(sieppari-test)
|
||||||
(pedestal-chain-text)
|
(pedestal-chain-text)
|
||||||
(pedestal-tuned-chain-text)
|
|
||||||
(interceptor-chain-test))
|
(interceptor-chain-test))
|
||||||
|
|
||||||
; Middleware (static chain) => 5µs
|
; Middleware (static chain) => 5µs
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue