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…
Reference in New Issue