From 4bef3c68ba876df539cb27df17fffb90230b0786 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Wed, 18 Jun 2025 10:31:33 +0800 Subject: [PATCH] enhance: transfer bytes when sending data from worker to ui --- src/main/frontend/common/thread_api.cljc | 8 ++++---- src/main/frontend/persist_db/browser.cljs | 16 +++++++++------- src/main/frontend/worker/db_worker.cljs | 3 ++- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/main/frontend/common/thread_api.cljc b/src/main/frontend/common/thread_api.cljc index 613d47a6ba..c3421c5745 100644 --- a/src/main/frontend/common/thread_api.cljc +++ b/src/main/frontend/common/thread_api.cljc @@ -20,7 +20,6 @@ ~qualified-keyword-name (fn ~(symbol (str "thread-api--" (name qualified-keyword-name))) ~params ~@body))) - #?(:cljs (def *profile (volatile! {}))) #?(:cljs @@ -36,7 +35,8 @@ (if (fn? result) ;; missionary task is a fn (js/Promise. result) result)] - (p/chain - result-promise - ldb/write-transit-str)) + (p/let [result' result-promise] + (if (instance? js/Uint8Array result') + result' + (ldb/write-transit-str result')))) (throw (ex-info (str "not found thread-api: " qualified-kw-str) {})))))) diff --git a/src/main/frontend/persist_db/browser.cljs b/src/main/frontend/persist_db/browser.cljs index a1b2dcf83c..d1d48b9d99 100644 --- a/src/main/frontend/persist_db/browser.cljs +++ b/src/main/frontend/persist_db/browser.cljs @@ -91,13 +91,15 @@ worker (js/Worker. (str worker-url "?electron=" (util/electron?) "&publishing=" config/publishing?)) wrapped-worker* (Comlink/wrap worker) wrapped-worker (fn [qkw direct-pass-args? & args] - (-> (.remoteInvoke ^js wrapped-worker* - (str (namespace qkw) "/" (name qkw)) - direct-pass-args? - (if direct-pass-args? - (into-array args) - (ldb/write-transit-str args))) - (p/chain ldb/read-transit-str))) + (p/let [result (.remoteInvoke ^js wrapped-worker* + (str (namespace qkw) "/" (name qkw)) + direct-pass-args? + (if direct-pass-args? + (into-array args) + (ldb/write-transit-str args)))] + (if (instance? js/Uint8Array result) + result + (ldb/read-transit-str result)))) t1 (util/time-ms)] (Comlink/expose #js{"remoteInvoke" thread-api/remote-function} worker) (worker-handler/handle-message! worker wrapped-worker) diff --git a/src/main/frontend/worker/db_worker.cljs b/src/main/frontend/worker/db_worker.cljs index 5a9a45b7cb..383505c85e 100644 --- a/src/main/frontend/worker/db_worker.cljs +++ b/src/main/frontend/worker/db_worker.cljs @@ -571,7 +571,8 @@ [repo] (when-let [^js db (worker-state/get-sqlite-conn repo :db)] (.exec db "PRAGMA wal_checkpoint(2)")) - (