mirror of
https://github.com/metosin/reitit.git
synced 2026-01-21 21:49:01 +00:00
2x speed with LookupRouter & fast-map on clj
This commit is contained in:
parent
1ea6b55849
commit
bbcf0c8350
3 changed files with 14 additions and 4 deletions
|
|
@ -1037,10 +1037,12 @@
|
||||||
pedestal-f #(pedestal/find-route cqrs-routes-pedestal {:path-info % :request-method :post})]
|
pedestal-f #(pedestal/find-route cqrs-routes-pedestal {:path-info % :request-method :post})]
|
||||||
|
|
||||||
;; 125ns
|
;; 125ns
|
||||||
|
;; 62ns (fast-map)
|
||||||
(bench! routes false "reitit" reitit-f)
|
(bench! routes false "reitit" reitit-f)
|
||||||
|
|
||||||
;; 272ns
|
;; 272ns
|
||||||
;; 219ns (fast-assoc)
|
;; 219ns (fast-assoc)
|
||||||
|
;; 171ns (fast-map)
|
||||||
(bench! routes false "reitit-ring" reitit-ring-f)
|
(bench! routes false "reitit-ring" reitit-ring-f)
|
||||||
|
|
||||||
;; 172ns
|
;; 172ns
|
||||||
|
|
|
||||||
|
|
@ -142,12 +142,12 @@
|
||||||
(route-names [_]
|
(route-names [_]
|
||||||
names)
|
names)
|
||||||
(match-by-path [_ path]
|
(match-by-path [_ path]
|
||||||
(data path))
|
(impl/fast-get data path))
|
||||||
(match-by-name [_ name]
|
(match-by-name [_ name]
|
||||||
(if-let [match (lookup name)]
|
(if-let [match (impl/fast-get lookup name)]
|
||||||
(match nil)))
|
(match nil)))
|
||||||
(match-by-name [_ name params]
|
(match-by-name [_ name params]
|
||||||
(if-let [match (lookup name)]
|
(if-let [match (impl/fast-get lookup name)]
|
||||||
(match params))))
|
(match params))))
|
||||||
|
|
||||||
(defn lookup-router
|
(defn lookup-router
|
||||||
|
|
@ -170,7 +170,7 @@
|
||||||
(if name
|
(if name
|
||||||
(assoc lookup name #(->Match p meta handler % p))
|
(assoc lookup name #(->Match p meta handler % p))
|
||||||
lookup)]) [{} {}] compiled)]
|
lookup)]) [{} {}] compiled)]
|
||||||
(->LookupRouter routes names data lookup))))
|
(->LookupRouter routes names (impl/fast-map data) (impl/fast-map lookup)))))
|
||||||
|
|
||||||
(defn router
|
(defn router
|
||||||
"Create a [[Router]] from raw route data and optionally an options map.
|
"Create a [[Router]] from raw route data and optionally an options map.
|
||||||
|
|
|
||||||
|
|
@ -139,3 +139,11 @@
|
||||||
(defn fast-assoc
|
(defn fast-assoc
|
||||||
#?@(:clj [[^clojure.lang.Associative a k v] (.assoc a k v)]
|
#?@(:clj [[^clojure.lang.Associative a k v] (.assoc a k v)]
|
||||||
:cljs [[a k v] (assoc a k v)]))
|
:cljs [[a k v] (assoc a k v)]))
|
||||||
|
|
||||||
|
(defn fast-map [m]
|
||||||
|
#?@(:clj [(java.util.HashMap. m)]
|
||||||
|
:cljs [m]))
|
||||||
|
|
||||||
|
(defn fast-get
|
||||||
|
#?@(:clj [[^java.util.HashMap m k] (.get m k)]
|
||||||
|
:cljs [[m k] (m k)]))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue