mirror of
https://github.com/logseq/logseq.git
synced 2026-05-05 11:26:26 +00:00
Improve long page editing performance (#3855)
* Remove expensive parsing when saving files * Add limit to page blocks query * Don't collapse block's body to make it compatible with other tools * Alert if there're unsaved changes when switching graphs * DB schema migration for :block/collapsed? from it's property Co-authored-by: Andelf <andelf@gmail.com>
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
[frontend.db.react]
|
||||
[frontend.db.utils]
|
||||
[frontend.db.persist :as db-persist]
|
||||
[frontend.db.migrate :as db-migrate]
|
||||
[frontend.namespaces :refer [import-vars]]
|
||||
[frontend.state :as state]
|
||||
[frontend.util :as util]
|
||||
@@ -29,7 +30,7 @@
|
||||
[frontend.db.utils
|
||||
date->int db->json db->edn-str db->string get-max-tx-id get-tx-id
|
||||
group-by-page seq-flatten sort-by-pos
|
||||
string->db with-repo
|
||||
string->db
|
||||
|
||||
entity pull pull-many transact! get-key-value]
|
||||
|
||||
@@ -48,7 +49,7 @@
|
||||
get-page-blocks-count get-page-blocks-no-cache get-page-file get-page-format get-page-properties
|
||||
get-page-referenced-blocks get-page-referenced-pages get-page-unlinked-references get-page-referenced-blocks-no-cache
|
||||
get-all-pages get-pages get-pages-relation get-pages-that-mentioned-page get-public-pages get-tag-pages
|
||||
journal-page? local-native-fs? mark-repo-as-cloned! page-alias-set page-blocks-transform pull-block
|
||||
journal-page? mark-repo-as-cloned! page-alias-set pull-block
|
||||
set-file-last-modified-at! transact-files-db! page-empty? page-empty-or-dummy? get-alias-source-page
|
||||
set-file-content! has-children? get-namespace-pages get-all-namespace-relation get-pages-by-name-partition]
|
||||
|
||||
@@ -66,6 +67,21 @@
|
||||
|
||||
[frontend.db.default built-in-pages-names built-in-pages])
|
||||
|
||||
(defn get-schema-version [db]
|
||||
(d/q
|
||||
'[:find ?v .
|
||||
:where
|
||||
[_ :schema/version ?v]]
|
||||
db))
|
||||
|
||||
(defn old-schema?
|
||||
[db]
|
||||
(let [v (get-schema-version db)]
|
||||
(if (integer? v)
|
||||
(> db-schema/version v)
|
||||
;; backward compatibility
|
||||
true)))
|
||||
|
||||
;; persisting DBs between page reloads
|
||||
(defn persist! [repo]
|
||||
(let [key (datascript-db repo)
|
||||
@@ -137,6 +153,8 @@
|
||||
(assoc option
|
||||
:listen-handler listen-and-persist!))))
|
||||
|
||||
;; TODO: only restore the current graph instead of all the graphs to speedup and
|
||||
;; reduce memory usage.
|
||||
(defn restore!
|
||||
[{:keys [repos] :as me} _old-db-schema restore-config-handler]
|
||||
(let [logged? (:name me)]
|
||||
@@ -145,17 +163,20 @@
|
||||
(let [repo url]
|
||||
(p/let [db-name (datascript-db repo)
|
||||
db-conn (d/create-conn db-schema/schema)
|
||||
_ (d/transact! db-conn [{:schema/version db-schema/version}])
|
||||
_ (swap! conns assoc db-name db-conn)
|
||||
stored (db-persist/get-serialized-graph db-name)
|
||||
_ (if stored
|
||||
(let [stored-db (string->db stored)
|
||||
attached-db (d/db-with stored-db (concat
|
||||
[(me-tx stored-db me)]
|
||||
default-db/built-in-pages))]
|
||||
(conn/reset-conn! db-conn attached-db))
|
||||
default-db/built-in-pages))
|
||||
db (if (old-schema? attached-db)
|
||||
(db-migrate/migrate attached-db)
|
||||
attached-db)]
|
||||
(conn/reset-conn! db-conn db))
|
||||
(when logged?
|
||||
(d/transact! db-conn [(me-tx (d/db db-conn) me)])))]
|
||||
(d/transact! db-conn [{:schema/version db-schema/version}])
|
||||
(restore-config-handler repo)
|
||||
(listen-and-persist! repo)))))))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user