mirror of
https://github.com/metosin/reitit.git
synced 2026-02-15 15:55:15 +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})]
|
||||
|
||||
;; 125ns
|
||||
;; 62ns (fast-map)
|
||||
(bench! routes false "reitit" reitit-f)
|
||||
|
||||
;; 272ns
|
||||
;; 219ns (fast-assoc)
|
||||
;; 171ns (fast-map)
|
||||
(bench! routes false "reitit-ring" reitit-ring-f)
|
||||
|
||||
;; 172ns
|
||||
|
|
|
|||
|
|
@ -142,12 +142,12 @@
|
|||
(route-names [_]
|
||||
names)
|
||||
(match-by-path [_ path]
|
||||
(data path))
|
||||
(impl/fast-get data path))
|
||||
(match-by-name [_ name]
|
||||
(if-let [match (lookup name)]
|
||||
(if-let [match (impl/fast-get lookup name)]
|
||||
(match nil)))
|
||||
(match-by-name [_ name params]
|
||||
(if-let [match (lookup name)]
|
||||
(if-let [match (impl/fast-get lookup name)]
|
||||
(match params))))
|
||||
|
||||
(defn lookup-router
|
||||
|
|
@ -170,7 +170,7 @@
|
|||
(if name
|
||||
(assoc lookup name #(->Match p meta handler % p))
|
||||
lookup)]) [{} {}] compiled)]
|
||||
(->LookupRouter routes names data lookup))))
|
||||
(->LookupRouter routes names (impl/fast-map data) (impl/fast-map lookup)))))
|
||||
|
||||
(defn router
|
||||
"Create a [[Router]] from raw route data and optionally an options map.
|
||||
|
|
|
|||
|
|
@ -139,3 +139,11 @@
|
|||
(defn fast-assoc
|
||||
#?@(:clj [[^clojure.lang.Associative 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