From 146394f3ca0f226eb77ef3115364deb161951289 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 5 Mar 2021 17:31:26 +0100 Subject: [PATCH] :tada: Add thumbnail caching. Avoid unnecesary rendering unchanged pages. --- backend/src/app/rpc/queries/files.clj | 1 - frontend/src/app/worker/thumbnails.cljs | 19 ++++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/backend/src/app/rpc/queries/files.clj b/backend/src/app/rpc/queries/files.clj index d3e3bfd61c..b96903ddd0 100644 --- a/backend/src/app/rpc/queries/files.clj +++ b/backend/src/app/rpc/queries/files.clj @@ -166,7 +166,6 @@ (let [file (retrieve-file conn file-id)] (get-in file [:data :pages-index id])))) - ;; --- Query: Shared Library Files (def ^:private sql:shared-files diff --git a/frontend/src/app/worker/thumbnails.cljs b/frontend/src/app/worker/thumbnails.cljs index 4bcf3cc77d..d91d47f69c 100644 --- a/frontend/src/app/worker/thumbnails.cljs +++ b/frontend/src/app/worker/thumbnails.cljs @@ -45,13 +45,22 @@ (fn [error] (reject error)))))))) +(defonce cache (atom {})) + +(defn render-page + [data ckey] + (let [prev (get @cache ckey)] + (if (= (:data prev) data) + (:result prev) + (let [elem (mf/element exports/page-svg #js {:data data :width "290" :height "150"}) + result (rds/renderToStaticMarkup elem)] + (swap! cache assoc ckey {:data data :result result}) + result)))) + (defmethod impl/handler :thumbnails/generate [{:keys [file-id page-id] :as message}] (p/then (request-page file-id page-id) (fn [data] - (let [elem (mf/element exports/page-svg #js {:data data - :width "290" - :height "150"})] - {:svg (rds/renderToStaticMarkup elem) - :fonts @fonts/loaded})))) + {:svg (render-page data #{file-id page-id}) + :fonts @fonts/loaded})))