@@ -194,15 +194,15 @@ export class Batch {
194
194
// if we didn't start any new async work, and no async work
195
195
// is outstanding from a previous flush, commit
196
196
if ( this . #async_effects. length === 0 && this . #pending === 0 ) {
197
+ this . #commit( ) ;
198
+
197
199
var render_effects = this . #render_effects;
198
200
var effects = this . #effects;
199
201
200
202
this . #render_effects = [ ] ;
201
203
this . #effects = [ ] ;
202
204
this . #block_effects = [ ] ;
203
205
204
- this . #commit( ) ;
205
-
206
206
flush_queued_effects ( render_effects ) ;
207
207
flush_queued_effects ( effects ) ;
208
208
@@ -540,49 +540,49 @@ function flush_queued_effects(effects) {
540
540
var length = effects . length ;
541
541
if ( length === 0 ) return ;
542
542
543
- for ( var i = 0 ; i < length ; i ++ ) {
544
- var effect = effects [ i ] ;
545
-
546
- if ( ( effect . f & ( DESTROYED | INERT ) ) === 0 ) {
547
- if ( is_dirty ( effect ) ) {
548
- var wv = write_version ;
549
-
550
- // updating a derived for also increase the write version but that doesn't mean
551
- // state was written to in the user effect...so we reset the derived writes
552
- // before running the effect so that we can subtract the amount of derived writes
553
- // from the write version when we detect if state was written to in the user effect
554
- reset_derived_writes ( ) ;
555
-
556
- update_effect ( effect ) ;
557
-
558
- // Effects with no dependencies or teardown do not get added to the effect tree.
559
- // Deferred effects (e.g. `$effect(...)`) _are_ added to the tree because we
560
- // don't know if we need to keep them until they are executed. Doing the check
561
- // here (rather than in `update_effect`) allows us to skip the work for
562
- // immediate effects.
563
- if ( effect . deps === null && effect . first === null && effect . nodes_start === null ) {
564
- // if there's no teardown or abort controller we completely unlink
565
- // the effect from the graph
566
- if ( effect . teardown === null && effect . ac === null ) {
567
- // remove this effect from the graph
568
- unlink_effect ( effect ) ;
569
- } else {
570
- // keep the effect in the graph, but free up some memory
571
- effect . fn = null ;
572
- }
573
- }
543
+ var i = 0 ;
544
+
545
+ while ( i < length ) {
546
+ var effect = effects [ i ++ ] ;
574
547
575
- // if state is written in a user effect, abort and re-schedule, lest we run
576
- // effects that should be removed as a result of the state change
577
- if ( write_version - get_derived_writes ( ) > wv && ( effect . f & USER_EFFECT ) !== 0 ) {
578
- break ;
548
+ if ( ( effect . f & ( DESTROYED | INERT ) ) === 0 && is_dirty ( effect ) ) {
549
+ var wv = write_version ;
550
+
551
+ // updating a derived for also increase the write version but that doesn't mean
552
+ // state was written to in the user effect...so we reset the derived writes
553
+ // before running the effect so that we can subtract the amount of derived writes
554
+ // from the write version when we detect if state was written to in the user effect
555
+ reset_derived_writes ( ) ;
556
+
557
+ update_effect ( effect ) ;
558
+
559
+ // Effects with no dependencies or teardown do not get added to the effect tree.
560
+ // Deferred effects (e.g. `$effect(...)`) _are_ added to the tree because we
561
+ // don't know if we need to keep them until they are executed. Doing the check
562
+ // here (rather than in `update_effect`) allows us to skip the work for
563
+ // immediate effects.
564
+ if ( effect . deps === null && effect . first === null && effect . nodes_start === null ) {
565
+ // if there's no teardown or abort controller we completely unlink
566
+ // the effect from the graph
567
+ if ( effect . teardown === null && effect . ac === null ) {
568
+ // remove this effect from the graph
569
+ unlink_effect ( effect ) ;
570
+ } else {
571
+ // keep the effect in the graph, but free up some memory
572
+ effect . fn = null ;
579
573
}
580
574
}
575
+
576
+ // if state is written in a user effect, abort and re-schedule, lest we run
577
+ // effects that should be removed as a result of the state change
578
+ if ( write_version - get_derived_writes ( ) > wv && ( effect . f & USER_EFFECT ) !== 0 ) {
579
+ break ;
580
+ }
581
581
}
582
582
}
583
583
584
- for ( ; i < length ; i += 1 ) {
585
- schedule_effect ( effects [ i ] ) ;
584
+ while ( i < length ) {
585
+ schedule_effect ( effects [ i ++ ] ) ;
586
586
}
587
587
}
588
588
0 commit comments