@@ -49,10 +49,12 @@ export abstract class AbstractMySegmentsCacheSync implements ISegmentsCacheSync
4949 * For client-side synchronizer: it resets or updates the cache.
5050 */
5151 resetSegments ( segmentsData : MySegmentsData | IMySegmentsResponse ) : boolean {
52+ this . setChangeNumber ( segmentsData . cn ) ;
53+
5254 const { added, removed } = segmentsData as MySegmentsData ;
53- let isDiff = false ;
5455
5556 if ( added && removed ) {
57+ let isDiff = false ;
5658
5759 added . forEach ( segment => {
5860 isDiff = this . addSegment ( segment ) || isDiff ;
@@ -61,40 +63,32 @@ export abstract class AbstractMySegmentsCacheSync implements ISegmentsCacheSync
6163 removed . forEach ( segment => {
6264 isDiff = this . removeSegment ( segment ) || isDiff ;
6365 } ) ;
64- } else {
6566
66- const names = ( ( segmentsData as IMySegmentsResponse ) . k || [ ] ) . map ( s => s . n ) . sort ( ) ;
67- const storedSegmentKeys = this . getRegisteredSegments ( ) . sort ( ) ;
67+ return isDiff ;
68+ }
6869
69- // Extreme fast => everything is empty
70- if ( ! names . length && ! storedSegmentKeys . length ) {
71- isDiff = false ;
72- } else {
70+ const names = ( ( segmentsData as IMySegmentsResponse ) . k || [ ] ) . map ( s => s . n ) . sort ( ) ;
71+ const storedSegmentKeys = this . getRegisteredSegments ( ) . sort ( ) ;
7372
74- let index = 0 ;
73+ // Extreme fast => everything is empty
74+ if ( ! names . length && ! storedSegmentKeys . length ) return false ;
7575
76- while ( index < names . length && index < storedSegmentKeys . length && names [ index ] === storedSegmentKeys [ index ] ) index ++ ;
76+ let index = 0 ;
7777
78- // Quick path => no changes
79- if ( index === names . length && index === storedSegmentKeys . length ) {
80- isDiff = false ;
81- } else {
78+ while ( index < names . length && index < storedSegmentKeys . length && names [ index ] === storedSegmentKeys [ index ] ) index ++ ;
8279
83- // Slowest path => add and/or remove segments
84- for ( let removeIndex = index ; removeIndex < storedSegmentKeys . length ; removeIndex ++ ) {
85- this . removeSegment ( storedSegmentKeys [ removeIndex ] ) ;
86- }
80+ // Quick path => no changes
81+ if ( index === names . length && index === storedSegmentKeys . length ) return false ;
8782
88- for ( let addIndex = index ; addIndex < names . length ; addIndex ++ ) {
89- this . addSegment ( names [ addIndex ] ) ;
90- }
83+ // Slowest path => add and/or remove segments
84+ for ( let removeIndex = index ; removeIndex < storedSegmentKeys . length ; removeIndex ++ ) {
85+ this . removeSegment ( storedSegmentKeys [ removeIndex ] ) ;
86+ }
9187
92- isDiff = true ;
93- }
94- }
88+ for ( let addIndex = index ; addIndex < names . length ; addIndex ++ ) {
89+ this . addSegment ( names [ addIndex ] ) ;
9590 }
9691
97- this . setChangeNumber ( segmentsData . cn ) ;
98- return isDiff ;
92+ return true ;
9993 }
10094}
0 commit comments