From e2a6619a53d250bde5dd53d9043f9c1c3222a753 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Fri, 1 Dec 2023 14:57:19 +0000 Subject: [PATCH] tune perf of has() more --- packages/svelte/src/internal/client/proxy.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/svelte/src/internal/client/proxy.js b/packages/svelte/src/internal/client/proxy.js index 0f7ddfec6d..eae1984b7d 100644 --- a/packages/svelte/src/internal/client/proxy.js +++ b/packages/svelte/src/internal/client/proxy.js @@ -103,16 +103,23 @@ const handler = { return delete target[prop]; }, has(target, prop) { + if (prop === STATE_SYMBOL) { + return true; + } const metadata = target[STATE_SYMBOL]; const has = Reflect.has(target, prop); let s = metadata.s.get(prop); - if (s === undefined) { - s = source(has ? proxy(target[prop]) : UNINITIALIZED); - increment(metadata.v); - metadata.s.set(prop, s); + if (!has || s !== undefined || get_descriptor(target, prop)?.writable) { + if (s === undefined) { + s = source(has ? proxy(target[prop]) : UNINITIALIZED); + metadata.s.set(prop, s); + } + const value = get(s); + if (value === UNINITIALIZED) { + return false; + } } - const value = get(s); - return value === UNINITIALIZED ? false : has; + return has; }, ownKeys(target) { const metadata = target[STATE_SYMBOL];