Skip to content

Commit 2a192de

Browse files
committed
optimise effects
1 parent f6e8777 commit 2a192de

File tree

1 file changed

+11
-15
lines changed

1 file changed

+11
-15
lines changed

packages/svelte/src/internal/client/runtime.js

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -588,11 +588,11 @@ export function schedule_effect(signal) {
588588
*
589589
* @param {import('#client').Effect} effect
590590
* @param {number} filter_flags
591-
* @param {boolean} shallow
591+
* @param {boolean} recursive
592592
* @param {import('#client').Effect[]} collected_effects
593593
* @returns {void}
594594
*/
595-
function process_effects(effect, filter_flags, shallow, collected_effects) {
595+
function process_effects(effect, filter_flags, recursive, collected_effects) {
596596
var current_effect = effect.first;
597597
var effects = [];
598598

@@ -616,13 +616,13 @@ function process_effects(effect, filter_flags, shallow, collected_effects) {
616616
// Child might have been mutated since running the effect
617617
child = current_effect.first;
618618
}
619-
if (!shallow && child !== null) {
619+
if (recursive && child !== null) {
620620
current_effect = child;
621621
continue;
622622
}
623623
} else if ((flags & EFFECT) !== 0) {
624624
if (is_branch || is_clean) {
625-
if (!shallow && child !== null) {
625+
if (recursive && child !== null) {
626626
current_effect = child;
627627
continue;
628628
}
@@ -652,16 +652,12 @@ function process_effects(effect, filter_flags, shallow, collected_effects) {
652652
current_effect = sibling;
653653
}
654654

655-
if (effects.length > 0) {
655+
if (recursive && effects.length > 0) {
656656
// We might be dealing with many effects here, far more than can be spread into
657657
// an array push call (callstack overflow). So let's deal with each effect in a loop.
658658
for (var i = 0; i < effects.length; i++) {
659-
if ((filter_flags & EFFECT) !== 0) {
660-
collected_effects.push(effects[i]);
661-
}
662-
if (!shallow) {
663-
process_effects(effects[i], filter_flags, false, collected_effects);
664-
}
659+
collected_effects.push(effects[i]);
660+
process_effects(effects[i], filter_flags, true, collected_effects);
665661
}
666662
}
667663
}
@@ -674,10 +670,10 @@ function process_effects(effect, filter_flags, shallow, collected_effects) {
674670
*
675671
* @param {import('#client').Effect} effect
676672
* @param {number} filter_flags
677-
* @param {boolean} [shallow]
673+
* @param {boolean} [recursive]
678674
* @returns {void}
679675
*/
680-
function flush_nested_effects(effect, filter_flags, shallow = false) {
676+
function flush_nested_effects(effect, filter_flags, recursive = true) {
681677
/** @type {import('#client').Effect[]} */
682678
var collected_effects = [];
683679

@@ -689,7 +685,7 @@ function flush_nested_effects(effect, filter_flags, shallow = false) {
689685
if (effect.first === null && (effect.f & BRANCH_EFFECT) === 0) {
690686
flush_queued_effects([effect]);
691687
} else {
692-
process_effects(effect, filter_flags, shallow, collected_effects);
688+
process_effects(effect, filter_flags, recursive, collected_effects);
693689
flush_queued_effects(collected_effects);
694690
}
695691
} finally {
@@ -705,7 +701,7 @@ export function flush_local_render_effects(effect) {
705701
infinite_loop_guard();
706702
// We are entering a new flush sequence, so ensure counter is reset.
707703
flush_count = 0;
708-
flush_nested_effects(effect, RENDER_EFFECT, true);
704+
flush_nested_effects(effect, RENDER_EFFECT, false);
709705
}
710706

711707
/**

0 commit comments

Comments
 (0)