Explorar o código

perf: no need to async get page block for all pages

Tienson Qin hai 7 meses
pai
achega
83af4e8c17

+ 2 - 1
src/main/frontend/components/all_pages.cljs

@@ -16,7 +16,8 @@
   (->> [{:id :block/title
          :name (t :block/name)
          :cell (fn [_table row _column]
-                 (component-block/page-cp {} row))
+                 (component-block/page-cp {:show-non-exists-page? true
+                                           :skip-async-load? true} row))
          :type :string}
         (when (not (config/db-based-graph? (state/get-current-repo)))
           {:id :block/type

+ 12 - 5
src/main/frontend/components/block.cljs

@@ -905,14 +905,19 @@
 
 (rum/defcs page-cp-inner < db-mixins/query rum/reactive
   {:init (fn [state]
-           (let [page (last (:rum/args state))
+           (let [args (:rum/args state)
+                 page (last args)
                  *result (atom nil)
                  page-name (or (:block/uuid page)
                                (when-let [s (:block/name page)]
                                  (string/trim s)))
                  page-entity (if (e/entity? page) page (db/get-page page-name))]
-             (if page-entity
+             (cond
+               page-entity
                (reset! *result page-entity)
+               (:skip-async-load? (first args))
+               (reset! *result page)
+               :else
                (p/let [query-result (db-async/<get-block (state/get-current-repo) page-name {:children? false})
                        result (if (e/entity? query-result)
                                 query-result
@@ -923,7 +928,7 @@
   "Component for a page. `page` argument contains :block/name which can be (un)sanitized page name.
    Keys for `config`:
    - `:preview?`: Is this component under preview mode? (If true, `page-preview-trigger` won't be registered to this `page-cp`)"
-  [state {:keys [label children preview? disable-preview? show-non-exists-page? tag?] :as config} page]
+  [state {:keys [label children preview? disable-preview? show-non-exists-page? tag? _skip-async-load?] :as config} page]
   (when-let [entity' (rum/react (:*entity state))]
     (let [entity (db/sub-block (:db/id entity'))]
       (cond
@@ -953,8 +958,10 @@
         (invalid-node-ref (:block/name page))
 
         (and (:block/name page) show-non-exists-page?)
-        (page-inner config {:block/title (:block/name page)
-                            :block/name (:block/name page)} children label)
+        (page-inner config (merge
+                            {:block/title (:block/name page)
+                             :block/name (:block/name page)}
+                            page) children label)
 
         (:block/name page)
         [:span (str (when tag? "#")

+ 8 - 18
src/main/frontend/components/views.cljs

@@ -1176,9 +1176,9 @@
          :end-reached end-reached}))]))
 
 (defn- run-effects!
-  [option {:keys [data columns state data-fns]} input input-filters set-input-filters! *scroller-ref gallery?]
-  (let [{:keys [filters sorting]} state
-        {:keys [set-row-filter! set-data!]} data-fns]
+  [option {:keys [data state data-fns]} input input-filters set-input-filters! *scroller-ref gallery?]
+  (let [{:keys [filters]} state
+        {:keys [set-row-filter!]} data-fns]
     (hooks/use-effect!
      (fn []
        (let [new-input-filters [input filters]]
@@ -1194,19 +1194,8 @@
      (fn []
        (when (and (:current-page? (:config option)) (seq data) (map? (first data)) (:block/uuid (first data)))
          (ui-handler/scroll-to-anchor-block @*scroller-ref data gallery?)
-         (state/set-state! :editor/virtualized-scroll-fn #(ui-handler/scroll-to-anchor-block @*scroller-ref data gallery?)))
-
-       ;; Entities might be outdated
-       ;; (let [;; TODO: should avoid this for better performance, 300ms for 40k pages
-       ;;       data' (map get-latest-entity data)
-       ;;       ]
-       ;;   (when (and (not= data' data) set-data!)
-       ;;     (set-data! data'))
-       ;;   )
-       )
-     []
-     ;; [sorting data]
-     )))
+         (state/set-state! :editor/virtualized-scroll-fn #(ui-handler/scroll-to-anchor-block @*scroller-ref data gallery?))))
+     [])))
 
 (rum/defc view-sorting-item
   [table sorting id name asc? set-sorting!]
@@ -1588,8 +1577,9 @@
 (defn- <load-view-data
   [view offset]
   (p/let [data-str (.get-view-data ^js @state/*db-worker (state/get-current-repo) (:db/id view)
-                                   (ldb/write-transit-str {:offset offset :limit 100}))]
-    (ldb/read-transit-str data-str)))
+                                   (ldb/write-transit-str {:offset offset :limit 100}))
+          data (ldb/read-transit-str data-str)]
+    data))
 
 (rum/defc view < rum/static
   [{:keys [view-parent view-feature-type view-entity] :as option}]