enhance: transfer bytes when sending data from worker to ui

This commit is contained in:
Tienson Qin
2025-06-18 10:31:33 +08:00
parent 018f954af1
commit 4bef3c68ba
3 changed files with 15 additions and 12 deletions

View File

@@ -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) {}))))))

View File

@@ -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)

View File

@@ -571,7 +571,8 @@
[repo]
(when-let [^js db (worker-state/get-sqlite-conn repo :db)]
(.exec db "PRAGMA wal_checkpoint(2)"))
(<export-db-file repo))
(p/let [data (<export-db-file repo)]
(Comlink/transfer data #js [(.-buffer data)])))
(def-thread-api :thread-api/import-db
[repo data]