incremental-batches
Rich Harris 3 weeks ago
parent e39f561ac9
commit 9e09508df4

@ -10,7 +10,9 @@ import {
ASYNC,
WAS_MARKED,
DESTROYED,
REACTION_RAN
REACTION_RAN,
CONNECTED,
CLEAN
} from '#client/constants';
import {
active_reaction,
@ -400,6 +402,10 @@ export function update_derived(derived) {
derived.wv = write_version;
}
}
if (active_batch === null && (derived.f & CONNECTED) !== 0) {
derived.f |= CLEAN;
}
}
/**

@ -337,9 +337,10 @@ export function mark_reactions(signal, wv, updated_during_traversal) {
if ((flags & DERIVED) !== 0) {
var derived = /** @type {Derived} */ (reaction);
active_batch?.values?.delete(derived);
if (wv > get_cv(derived)) {
active_batch?.values?.delete(derived);
derived.f &= ~CLEAN;
if ((flags & WAS_MARKED) === 0) {
// Only connected deriveds can be reliably unmarked right away
if (flags & CONNECTED) {

@ -21,7 +21,8 @@ import {
WAS_MARKED,
MANAGED_EFFECT,
REACTION_RAN,
EFFECT_LEGACY
EFFECT_LEGACY,
CLEAN
} from './constants.js';
import { old_values } from './reactivity/sources.js';
import {
@ -167,6 +168,14 @@ export function is_dirty(reaction) {
if (flags & DERIVED) {
reaction.f &= ~WAS_MARKED;
if ((flags & CONNECTED) !== 0) {
if (active_batch !== null) {
if (active_batch.values?.has(reaction)) return false;
} else {
if ((reaction.f & CLEAN) !== 0) return false;
}
}
}
var dependencies = /** @type {Value[]} */ (reaction.deps);

Loading…
Cancel
Save