Browse Source

Cache list counter

improve-loading-perfs
Artur Arseniev 5 months ago
parent
commit
f4d6733150
  1. 39
      packages/core/src/dom_components/model/Component.ts

39
packages/core/src/dom_components/model/Component.ts

@ -95,6 +95,8 @@ type GetComponentStyleOpts = GetStyleOpts & {
inline?: boolean;
};
const idsMapCounter = Symbol('idsMapCounter');
/**
* The Component object represents a single node of our template structure, so when you update its properties the changes are
* immediately reflected on the canvas and in the code to export (indeed, when you ask to export the code we just go through all
@ -412,11 +414,17 @@ export default class Component extends StyleableModel<ComponentProperties> {
const { em } = this;
const um = em?.UndoManager;
const comps = this.components();
if (um && !this.__hasUm) {
if (!um || this.__hasUm) {
return;
}
if (um) {
um.add(comps);
um.add(this.getSelectors());
this.__hasUm = true;
}
opts.recursive && comps.map((c) => c.__postAdd(opts));
}
@ -2132,12 +2140,12 @@ export default class Component extends StyleableModel<ComponentProperties> {
idMap[currentId] = nextId;
}
list[nextId] = model;
Component.setListId(list, nextId, model);
return nextId;
}
static getNewId(list: ObjectAny) {
const count = Object.keys(list).length;
const count = Component.getListCount(list);
const ilen = count.toString().length + 2;
const uid = (Math.random() + 1.1).toString(36).slice(-ilen);
let newId = `i${uid}`;
@ -2149,6 +2157,31 @@ export default class Component extends StyleableModel<ComponentProperties> {
return newId;
}
static getListCount(list: ObjectAny) {
const listWithCounter = list as ObjectAny & { [idsMapCounter]?: number };
let count = listWithCounter[idsMapCounter];
if (isUndefined(count)) {
count = Object.keys(list).length;
Object.defineProperty(list, idsMapCounter, {
configurable: true,
writable: true,
value: count,
});
}
return count;
}
static setListId(list: ObjectAny, id: string, model: Component) {
if (!list[id]) {
const listWithCounter = list as ObjectAny & { [idsMapCounter]?: number };
listWithCounter[idsMapCounter] = Component.getListCount(list) + 1;
}
list[id] = model;
}
static getIncrementId(id: string, list: ObjectAny, opts: { keepIds?: string[] } = {}) {
const { keepIds = [] } = opts;
let counter = 1;

Loading…
Cancel
Save