reitit/perf-test/clj/reitit/impl_perf_test.clj
2018-08-02 16:06:34 +03:00

170 lines
3.2 KiB
Clojure

(ns reitit.impl-perf-test
(:require [criterium.core :as cc]
[reitit.perf-utils :refer :all]
[ring.util.codec]
[reitit.impl])
(:import (java.net URLDecoder URLEncoder)))
;;
;; start repl with `lein perf repl`
;; 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 test! [f input]
(do
(println "\u001B[33m")
(println (pr-str input) "=>" (pr-str (f input)))
(println "\u001B[0m")
(cc/quick-bench (f input))))
(defn url-decode-naive [s]
(URLDecoder/decode
(.replace ^String s "+" "%2B")
"UTF-8"))
(defn url-decode! []
;; ring
;; 890ns
;; 190ns
;; 90ns
;; 80ns
;; naive
;; 750ns
;; 340ns
;; 420ns
;; 200ns
;; reitit
;; 630ns (-29%)
;; 12ns (-94%)
;; 8ns (-91%)
;; 8ns (-90%)
(doseq [fs ['ring.util.codec/url-decode
'url-decode-naive
'reitit.impl/url-decode]
:let [f (deref (resolve fs))]]
(suite (str fs))
(doseq [s ["aja%20hiljaa+sillalla"
"aja_hiljaa_sillalla"
"1+1"
"1"]]
(test! f s))))
(defn url-encode-naive [^String s]
(cond-> (.replace (URLEncoder/encode s "UTF-8") "+" "%20")
(.contains s "+") (.replace "%2B" "+")
(.contains s "~") (.replace "%7E" "~")
(.contains s "=") (.replace "%3D" "=")
(.contains s "!") (.replace "%21" "!")
(.contains s "'") (.replace "%27" "'")
(.contains s "(") (.replace "%28" "(")
(.contains s ")") (.replace "%29" ")")))
(defn url-encode! []
;; ring
;; 2500ns
;; 610ns
;; 160ns
;; 120ns
;; naive
;; 1000ns
;; 440ns
;; 570ns
;; 200ns
;; reitit
;; 1400ns
;; 740ns
;; 180ns
;; 130ns
(doseq [fs ['ring.util.codec/url-encode
'url-encode-naive
'reitit.impl/url-encode]
:let [f (deref (resolve fs))]]
(suite (str fs))
(doseq [s ["aja hiljaa+sillalla"
"aja_hiljaa_sillalla"
"1+1"
"1"]]
(test! f s))))
(defn form-decode! []
;; ring
;; 280ns
;; 130ns
;; 43ns
;; 25ns
;; reitit
;; 270ns (-4%)
;; 20ns (-84%)
;; 47ns (+8%)
;; 12ns (-52%)
(doseq [fs ['ring.util.codec/form-decode-str
'reitit.impl/form-decode]
:let [f (deref (resolve fs))]]
(suite (str fs))
(doseq [s ["%2Baja%20hiljaa+sillalla"
"aja_hiljaa_sillalla"
"1+1"
"1"]]
(test! f s))))
(defn form-encode! []
;; ring
;; 240ns
;; 120ns
;; 130ns
;; 31ns
;; reitit
;; 210ns
;; 120ns
;; 130ns
;; 30ns
(doseq [fs ['ring.util.codec/form-encode
'reitit.impl/form-encode]
:let [f (deref (resolve fs))]]
(suite (str fs))
(doseq [s ["aja hiljaa+sillalla"
"aja_hiljaa_sillalla"
"1+1"
"1"]]
(test! f s))))
(comment
(url-decode!)
(url-encode!)
(form-decode!)
(form-encode!))