Skip to content

Commit af2a5fb

Browse files
committed
perf: create wrapped signal only once for attributes diff
1 parent 313d53e commit af2a5fb

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

packages/qwik/src/core/client/vnode-diff.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -831,7 +831,20 @@ export const vnode_diff = (
831831
}
832832

833833
if (isSignal(value)) {
834-
value = trackSignalAndAssignHost(value, vnode, key, container, NON_CONST_SUBSCRIPTION_DATA);
834+
const unwrappedSignal =
835+
value instanceof WrappedSignalImpl ? value.$unwrapIfSignal$() : value;
836+
const currentSignal =
837+
vnode?.[_EFFECT_BACK_REF]?.get(key)?.[EffectSubscriptionProp.CONSUMER];
838+
if (currentSignal === unwrappedSignal) {
839+
return;
840+
}
841+
value = trackSignalAndAssignHost(
842+
unwrappedSignal,
843+
vnode,
844+
key,
845+
container,
846+
NON_CONST_SUBSCRIPTION_DATA
847+
);
835848
}
836849

837850
vnode.setAttr(

0 commit comments

Comments
 (0)