[IMP] app: small scale perf improvement

This commit is contained in:
Géry Debongnie
2022-06-09 13:29:28 +02:00
committed by Sam Degueldre
parent 0e6059467f
commit d046913a01
3 changed files with 27 additions and 25 deletions
+9 -15
View File
@@ -130,29 +130,23 @@ export class App<
return hasDynamicPropList && Object.keys(props1).length !== Object.keys(props2).length;
}
const arePropsDifferent = hasSlotsProp ? () => true : _arePropsDifferent;
const updateAndRender = ComponentNode.prototype.updateAndRender;
const initiateRender = ComponentNode.prototype.initiateRender;
return (props: P, key: string, ctx: ComponentNode, parent: any, C: any) => {
let children = ctx.children;
let node: any = children[key];
if (node && node.status === STATUS.DESTROYED) {
if (
node &&
(node.status === STATUS.DESTROYED || (isDynamic && node.component.constructor !== C))
) {
node = undefined;
}
if (isDynamic && node && node.component.constructor !== C) {
node = undefined;
}
const parentFiber = ctx.fiber!;
if (node) {
let shouldRender = node.forceNextRender;
if (shouldRender) {
if (arePropsDifferent(node.props, props) || parentFiber.deep || node.forceNextRender) {
node.forceNextRender = false;
} else {
const currentProps = node.props;
shouldRender = parentFiber.deep || arePropsDifferent(currentProps, props);
}
if (shouldRender) {
node.updateAndRender(props, parentFiber);
updateAndRender.call(node, props, parentFiber);
}
} else {
// new component
@@ -168,7 +162,7 @@ export class App<
}
node = new ComponentNode(C, props, this, ctx, key);
children[key] = node;
node.initiateRender(new Fiber(node, parentFiber));
initiateRender.call(node, new Fiber(node, parentFiber));
}
parentFiber.childrenMap[key] = node;
return node;