Browse Source

fix: both ->clj and ->js are too expensive

Tienson Qin 5 years ago
parent
commit
45e9390b6c
2 changed files with 12 additions and 20 deletions
  1. 2 1
      src/main/frontend/db.cljs
  2. 10 19
      src/main/frontend/search.cljs

+ 2 - 1
src/main/frontend/db.cljs

@@ -1952,7 +1952,8 @@
                                  (contains? #{:page/name :block/content} (:a datom)))
                                data)]
                    (when-let [f @*sync-search-indice-f]
-                     (f datoms)))))))
+                     (profile "rebuild indice"
+                              (f datoms))))))))
 
 (defn- listen-and-persist!
   [repo]

+ 10 - 19
src/main/frontend/search.cljs

@@ -3,7 +3,7 @@
             [frontend.search.db :as search-db :refer [indices]]
             [frontend.config :as config]
             [frontend.state :as state]
-            [frontend.util :as util]
+            [frontend.util :as util :refer-macros [profile]]
             [cljs-bean.core :as bean]
             [clojure.string :as string]
             [clojure.set :as set]
@@ -222,17 +222,13 @@
                                          (set))]
             (swap! search-db/indices update-in [repo :pages]
                    (fn [pages]
-                     (let [pages (set (bean/->clj pages))
-                           pages (if (seq pages-to-remove-set)
-                                   (remove (fn [page]
-                                             (contains? pages-to-remove-set
-                                                        (string/lower-case (:name page))))
-                                           pages)
-                                   pages)
-                           pages (set/union (set pages) pages-to-add)]
-                       (bean/->js pages))))))
+                     (let [pages (.filter pages (fn [page]
+                                                  (not (contains? pages-to-remove-set
+                                                                  (string/lower-case (gobj/get page "name"))))))]
+                       (.concat pages (bean/->js pages-to-add)))))))
         (when (seq blocks)
-          (let [blocks-result (db/pull-many '[:db/id :block/uuid :block/format :block/content] (set (map :e blocks)))
+          (let [blocks-result (profile "pull many"
+                                       (db/pull-many '[:db/id :block/uuid :block/format :block/content] (set (map :e blocks))))
                 blocks-to-add-set (->> (filter :added blocks)
                                        (map :e)
                                        (set))
@@ -246,11 +242,6 @@
                                           (set))]
             (swap! search-db/indices update-in [repo :blocks]
                    (fn [blocks]
-                     (let [blocks (set (bean/->clj blocks))
-                           blocks (if (seq blocks-to-remove-set)
-                                    (remove (fn [block]
-                                              (contains? blocks-to-remove-set (:id block)))
-                                            blocks)
-                                    blocks)
-                           blocks (set/union (set blocks) blocks-to-add)]
-                       (bean/->js blocks))))))))))
+                     (let [blocks (.filter blocks (fn [block]
+                                                    (not (contains? blocks-to-remove-set (gobj/get block "id")))))]
+                       (.concat blocks (bean/->js blocks-to-add)))))))))))