perf(change_detection): do not generate onAllChangesDone when not needed
This commit is contained in:
		
							parent
							
								
									dd06a871b7
								
							
						
					
					
						commit
						adc27398fd
					
				| @ -135,7 +135,7 @@ export class AbstractChangeDetector<T> implements ChangeDetector { | ||||
| 
 | ||||
|   hydrated(): boolean { return this.context !== null; } | ||||
| 
 | ||||
|   callOnAllChangesDone(): void {} | ||||
|   callOnAllChangesDone(): void { this.dispatcher.notifyOnAllChangesDone(); } | ||||
| 
 | ||||
|   _detectChangesInLightDomChildren(throwOnChange: boolean): void { | ||||
|     var c = this.lightDomChildren; | ||||
|  | ||||
| @ -57,9 +57,7 @@ export class ChangeDetectorJITGenerator { | ||||
| 
 | ||||
|       ${this._genCheckNoChanges()} | ||||
| 
 | ||||
|       ${this._typeName}.prototype.callOnAllChangesDone = function() { | ||||
|         ${this._genCallOnAllChangesDoneBody()} | ||||
|       } | ||||
|       ${this._maybeGenCallOnAllChangesDone()} | ||||
| 
 | ||||
|       ${this._maybeGenHydrateDirectives()} | ||||
| 
 | ||||
| @ -117,7 +115,7 @@ export class ChangeDetectorJITGenerator { | ||||
|     return lines.join('\n'); | ||||
|   } | ||||
| 
 | ||||
|   _genCallOnAllChangesDoneBody(): string { | ||||
|   _maybeGenCallOnAllChangesDone(): string { | ||||
|     var notifications = []; | ||||
|     var dirs = this.directiveRecords; | ||||
| 
 | ||||
| @ -129,13 +127,17 @@ export class ChangeDetectorJITGenerator { | ||||
|             `${this._names.getDirectiveName(dir.directiveIndex)}.onAllChangesDone();`); | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|     var directiveNotifications = notifications.join("\n"); | ||||
| 
 | ||||
|     return ` | ||||
|       ${this._names.getDispatcherName()}.notifyOnAllChangesDone(); | ||||
|       ${directiveNotifications} | ||||
|     `;
 | ||||
|     if (notifications.length > 0) { | ||||
|       var directiveNotifications = notifications.join("\n"); | ||||
|       return ` | ||||
|         ${this._typeName}.prototype.callOnAllChangesDone = function() { | ||||
|           ${ABSTRACT_CHANGE_DETECTOR}.prototype.callOnAllChangesDone.call(this); | ||||
|           ${directiveNotifications} | ||||
|         } | ||||
|       `;
 | ||||
|     } else { | ||||
|       return ''; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   _genRecord(r: ProtoRecord): string { | ||||
|  | ||||
| @ -106,7 +106,7 @@ export class DynamicChangeDetector extends AbstractChangeDetector<any> { | ||||
|   } | ||||
| 
 | ||||
|   callOnAllChangesDone() { | ||||
|     this.dispatcher.notifyOnAllChangesDone(); | ||||
|     super.callOnAllChangesDone(); | ||||
|     var dirs = this.directiveRecords; | ||||
|     for (var i = dirs.length - 1; i >= 0; --i) { | ||||
|       var dir = dirs[i]; | ||||
|  | ||||
| @ -120,9 +120,7 @@ class _CodegenState { | ||||
| 
 | ||||
|         ${_genCheckNoChanges()} | ||||
| 
 | ||||
|         void callOnAllChangesDone() { | ||||
|           ${_getCallOnAllChangesDoneBody()} | ||||
|         } | ||||
|         ${_maybeGenCallOnAllChangesDone()} | ||||
| 
 | ||||
|         ${_maybeGenHydrateDirectives()} | ||||
| 
 | ||||
| @ -190,17 +188,23 @@ class _CodegenState { | ||||
| 
 | ||||
|   /// Generates calls to `onAllChangesDone` for all `Directive`s that request | ||||
|   /// them. | ||||
|   String _getCallOnAllChangesDoneBody() { | ||||
|   String _maybeGenCallOnAllChangesDone() { | ||||
|     // NOTE(kegluneq): Order is important! | ||||
|     var directiveNotifications = _directiveRecords.reversed | ||||
|         .where((rec) => rec.callOnAllChangesDone) | ||||
|         .map((rec) => | ||||
|             '${_names.getDirectiveName(rec.directiveIndex)}.onAllChangesDone();') | ||||
|         .join(''); | ||||
|     return ''' | ||||
|       ${_names.getDispatcherName()}.notifyOnAllChangesDone(); | ||||
|       ${directiveNotifications} | ||||
|     '''; | ||||
|             '${_names.getDirectiveName(rec.directiveIndex)}.onAllChangesDone();'); | ||||
| 
 | ||||
|     if (directiveNotifications.isNotEmpty) { | ||||
|       return ''' | ||||
|         void callOnAllChangesDone() { | ||||
|           ${_names.getDispatcherName()}.notifyOnAllChangesDone(); | ||||
|           ${directiveNotifications.join('')} | ||||
|         } | ||||
|       '''; | ||||
|     } else { | ||||
|       return ''; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   String _genDeclareFields() { | ||||
|  | ||||
| @ -73,10 +73,6 @@ class _MyComponent_ChangeDetector0 | ||||
|     runDetectChanges(true); | ||||
|   } | ||||
| 
 | ||||
|   void callOnAllChangesDone() { | ||||
|     this.dispatcher.notifyOnAllChangesDone(); | ||||
|   } | ||||
| 
 | ||||
|   void dehydrateDirectives(destroyPipes) { | ||||
|     this.myNum0 = this.interpolate1 = _gen.ChangeDetectionUtil.uninitialized; | ||||
|   } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user