From 44eb961c276f314e27c52ac25fdba447a0660941 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Wed, 27 Jan 2021 15:59:55 +0100 Subject: [PATCH] :sparkles: Improved performance in workers --- .../src/app/main/data/workspace/common.cljs | 11 ++++---- .../main/data/workspace/notifications.cljs | 2 +- frontend/src/app/worker/impl.cljs | 25 +++++++++++++------ 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/frontend/src/app/main/data/workspace/common.cljs b/frontend/src/app/main/data/workspace/common.cljs index 857d27957a..a655348248 100644 --- a/frontend/src/app/main/data/workspace/common.cljs +++ b/frontend/src/app/main/data/workspace/common.cljs @@ -108,7 +108,7 @@ (let [page-id (:current-page-id state)] (rx/concat (when (some :page-id changes) - (rx/of (update-indices page-id))) + (rx/of (update-indices page-id changes))) (when (and save-undo? (seq undo-changes)) (let [entry {:undo-changes undo-changes @@ -174,14 +174,13 @@ (rx/map (constantly ::index-initialized))))))) (defn update-indices - [page-id] + [page-id changes] (ptk/reify ::update-indices ptk/EffectEvent (effect [_ state stream] - (let [objects (lookup-page-objects state page-id)] - (uw/ask! {:cmd :update-page-indices - :page-id page-id - :objects objects}))))) + (uw/ask! {:cmd :update-page-indices + :page-id page-id + :changes changes})))) ;; --- Common Helpers & Events diff --git a/frontend/src/app/main/data/workspace/notifications.cljs b/frontend/src/app/main/data/workspace/notifications.cljs index 068c8b40a0..5bb09a96a8 100644 --- a/frontend/src/app/main/data/workspace/notifications.cljs +++ b/frontend/src/app/main/data/workspace/notifications.cljs @@ -206,7 +206,7 @@ (rx/merge (rx/of (dwp/shapes-changes-persisted file-id msg)) (when (seq page-ids) - (rx/from (map dwc/update-indices page-ids)))))))) + (rx/from (map dwc/update-indices page-ids changes)))))))) (s/def ::library-change-event (s/keys :req-un [::type diff --git a/frontend/src/app/worker/impl.cljs b/frontend/src/app/worker/impl.cljs index 99bc85fadd..30ec5b8e3c 100644 --- a/frontend/src/app/worker/impl.cljs +++ b/frontend/src/app/worker/impl.cljs @@ -7,10 +7,13 @@ (ns app.worker.impl (:require [okulary.core :as l] - [app.util.transit :as t])) + [app.util.transit :as t] + [app.common.pages.changes :as ch])) (enable-console-print!) +(defonce state (l/atom {:pages-index {}})) + ;; --- Handler (defmulti handler :cmd) @@ -24,15 +27,23 @@ message) (defmethod handler :initialize-indices - [message] + [{:keys [data] :as message}] + + (reset! state data) + (handler (-> message (assoc :cmd :selection/initialize-index))) (handler (-> message (assoc :cmd :snaps/initialize-index)))) (defmethod handler :update-page-indices - [message] - (handler (-> message - (assoc :cmd :selection/update-index))) - (handler (-> message - (assoc :cmd :snaps/update-index)))) + [{:keys [page-id changes] :as message}] + + (swap! state ch/process-changes changes false) + + (let [objects (get-in @state [:pages-index page-id :objects]) + message (assoc message :objects objects)] + (handler (-> message + (assoc :cmd :selection/update-index))) + (handler (-> message + (assoc :cmd :snaps/update-index)))))