@@ -49,10 +49,12 @@ export abstract class AbstractMySegmentsCacheSync implements ISegmentsCacheSync
49
49
* For client-side synchronizer: it resets or updates the cache.
50
50
*/
51
51
resetSegments ( segmentsData : MySegmentsData | IMySegmentsResponse ) : boolean {
52
+ this . setChangeNumber ( segmentsData . cn ) ;
53
+
52
54
const { added, removed } = segmentsData as MySegmentsData ;
53
- let isDiff = false ;
54
55
55
56
if ( added && removed ) {
57
+ let isDiff = false ;
56
58
57
59
added . forEach ( segment => {
58
60
isDiff = this . addSegment ( segment ) || isDiff ;
@@ -61,40 +63,32 @@ export abstract class AbstractMySegmentsCacheSync implements ISegmentsCacheSync
61
63
removed . forEach ( segment => {
62
64
isDiff = this . removeSegment ( segment ) || isDiff ;
63
65
} ) ;
64
- } else {
65
66
66
- const names = ( ( segmentsData as IMySegmentsResponse ) . k || [ ] ) . map ( s => s . n ) . sort ( ) ;
67
- const storedSegmentKeys = this . getRegisteredSegments ( ) . sort ( ) ;
67
+ return isDiff ;
68
+ }
68
69
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 ( ) ;
73
72
74
- let index = 0 ;
73
+ // Extreme fast => everything is empty
74
+ if ( ! names . length && ! storedSegmentKeys . length ) return false ;
75
75
76
- while ( index < names . length && index < storedSegmentKeys . length && names [ index ] === storedSegmentKeys [ index ] ) index ++ ;
76
+ let index = 0 ;
77
77
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 ++ ;
82
79
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 ;
87
82
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
+ }
91
87
92
- isDiff = true ;
93
- }
94
- }
88
+ for ( let addIndex = index ; addIndex < names . length ; addIndex ++ ) {
89
+ this . addSegment ( names [ addIndex ] ) ;
95
90
}
96
91
97
- this . setChangeNumber ( segmentsData . cn ) ;
98
- return isDiff ;
92
+ return true ;
99
93
}
100
94
}
0 commit comments