From b60c1b23deebe93b4531879fe03a706bab030fb8 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 12 Oct 2026 22:15:08 -0400 Subject: [PATCH] chore: remove stale_readers The dedupe isn't needed for any test, including async-stale-read-multiple-no-double-run. --- .../src/internal/client/reactivity/batch.js | 15 --------------- packages/svelte/src/internal/client/runtime.js | 11 +---------- 2 files changed, 1 insertion(+), 25 deletions(-) diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index 4f2bb92870..ba1c28134f 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -129,21 +129,6 @@ export class Batch { */ merged_into = null; - /** - * @type {Set | null} - */ - #stale_readers = null; - - /** - * Reactions that, while running in an earlier batch, read a value that this batch holds - * a newer version of, and that are therefore scheduled to re-run in this batch. Used to - * avoid scheduling the same reaction multiple times when it reads more than one such value. - * Lazily initialized for performance reasons. - */ - get stale_readers() { - return (this.#stale_readers ??= new Set()); - } - /** @type {Batch | null} */ prev = null; diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 1b439445b1..b0ce734fc0 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -764,27 +764,18 @@ function get_batch_value(signal, first_time) { (active_effect !== null && active_reaction === active_effect && (active_effect.f & REACTION_IS_UPDATING) !== 0) || (active_effect !== null && (active_effect.f & ASYNC) !== 0); - if ( - reader !== null && - reactive && - // a reaction can read several stale values in one run — only schedule the re-run once - !batch.stale_readers.has(reader) - ) { - batch.stale_readers.add(reader); - + if (reader !== null && reactive) { if (current.is_eager) { // Reactions of eager effects with at least one non-eager effect (which we know is true here due to the stale_sources check above) // need to rerun because they could do something like `$state.eager(count) !== count`. if (reader.deps?.some((dep) => dep.f & EAGER_EFFECT)) { batch.oncommit(() => { - batch.stale_readers.delete(reader); Batch.ensure(); invalidate(reader, DIRTY); }); } } else { queue_micro_task(() => { - batch.stale_readers.delete(reader); const b = batch.activate(); invalidate(reader, MAYBE_DIRTY); b.flush();