浏览代码

Bulk vue updates on update (#4235)

I noticed that adding or changing a large number of elements, especially
inside an SVG tag, takes very long.

This changes the update handler to first load all dependencies in
parallel and then update the elements.
Niklas Neugebauer 3 月之前
父节点
当前提交
4990c7228b
共有 1 个文件被更改,包括 6 次插入3 次删除
  1. 6 3
      nicegui/static/nicegui.js

+ 6 - 3
nicegui/static/nicegui.js

@@ -376,14 +376,17 @@ function createApp(elements, options) {
           document.getElementById("popup").ariaHidden = false;
           document.getElementById("popup").ariaHidden = false;
         },
         },
         update: async (msg) => {
         update: async (msg) => {
+          const loadPromises = Object.entries(msg)
+            .filter(([_, element]) => element && (element.component || element.libraries))
+            .map(([_, element]) => loadDependencies(element, options.prefix, options.version));
+
+          await Promise.all(loadPromises);
+
           for (const [id, element] of Object.entries(msg)) {
           for (const [id, element] of Object.entries(msg)) {
             if (element === null) {
             if (element === null) {
               delete this.elements[id];
               delete this.elements[id];
               continue;
               continue;
             }
             }
-            if (element.component || element.libraries) {
-              await loadDependencies(element, options.prefix, options.version);
-            }
             this.elements[id] = element;
             this.elements[id] = element;
             replaceUndefinedAttributes(this.elements, id);
             replaceUndefinedAttributes(this.elements, id);
           }
           }