fix: only abort effect flushing if it causes an existing effect to be scheduled

#16623

Closing issue

Pull request

Closed
R
Rich-Harris
Aug 14, 2025, 6:48 PM

Alternative to which I think is probably a bit simpler, and hopefully results in a greater performance boost.

Whereas works by flushing parts of the effect tree when an invalidation occurs, such that to-be-destroyed effects are destroyed before they can re-execute, this comes from the opposite end — we continue to abort flushing if a state change occurs in a user effect, but only if that state change results in an existing effect being marked (the cause of ).

Fixes .

Before submitting the PR, please make sure you do the following

  • It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs
  • Prefix your PR title with feat:, fix:, chore:, or docs:.
  • This message body should clearly illustrate what problems it solves.
  • Ideally, include a test that fails without this PR but passes with it.
  • If this PR changes code within packages/svelte/src, add a changeset (npx changeset).

Tests and linting

  • Run the tests with pnpm test and lint the project with pnpm lint

Info

Closed at Aug 17, 2025, 12:31 PM
Assignees None
Reviewers None
Labels None
Milestone None