From e12bfeabf154502b29564599c693f1f8619c76a0 Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Tue, 7 Nov 2017 20:36:26 +0200 Subject: [PATCH] Flattened matching, 1.2ms -> 0.8ms!!! --- perf-test/clj/reitit/trie.cljc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/perf-test/clj/reitit/trie.cljc b/perf-test/clj/reitit/trie.cljc index 523f22ea..67530998 100644 --- a/perf-test/clj/reitit/trie.cljc +++ b/perf-test/clj/reitit/trie.cljc @@ -44,14 +44,15 @@ (reify Node (lookup [this path params] - #_(println "w=>" segment "..." path) (let [i (.indexOf ^String path "/")] (if (pos? i) (let [value (subs path 0 i)] - (let [childs [(impl/fast-get children' (char-key path (inc i))) ?wild ?catch] + (let [child (impl/fast-get children' (char-key path (inc i))) path' (subs path (inc i)) params (assoc params param value)] - (some #(lookup % path' params) childs))) + (or (lookup child path' params) + (lookup ?wild path' params) + (lookup ?catch path' params)))) (assoc params param path)))) (get-segment [this] segment) @@ -76,14 +77,15 @@ (reify Node (lookup [this path params] - #_(println "s=>" segment "..." path) (if (.equals segment path) params (let [p (if (>= (count path) size) (subs path 0 size))] (if (.equals segment p) - (let [childs [(impl/fast-get children' (char-key path size)) ?wild ?catch] + (let [child (impl/fast-get children' (char-key path size)) path (subs path size)] - (some #(lookup % path params) childs)))))) + (or (lookup child path params) + (lookup ?wild path params) + (lookup ?catch path params))))))) (get-segment [this] segment) (update-segment [this subs lcs] @@ -315,4 +317,5 @@ ;; 1.3ms (fast-map) ;; 1.3ms (dissoc wild & catch-all from children) ;; 1.3ms (reified protocols) + ;; 0.8ms (flattened matching) (cc/quick-bench (dotimes [_ 1000] (lookup tree-new "/v1/orgs/1/topics" {}))))