Betrachten Sie das folgende Beispiel:Ist die Abhängigkeitsinjektion in Angular 2+ teuer?
@Directive({
selector: '[testActiveTab]'
})
export class ActiveTabDirective {
@Input('testActiveTab') active: boolean = true;
constructor(
private parent: TabbedContainerComponent, // <--
private child: TabComponent // <--
) {
}
// ...
}
Verwendung in Vorlage:
<test-tabbed-container>
<test-tab>
<!-- ... -->
</test-tab>
<test-tab testActiveTab>
<!-- ... -->
</test-tab>
</test-tabbed-container>
Wie Sie wahrscheinlich schon erraten, diese Richtlinie verwendet wird, eine aktive Registerkarte in den Registern Container-Komponente zu markieren. jedoch
das mögliche Problem ist, dass jedes Mal, wenn eine Instanz des ActiveTabDirective
erstellt wird, wird der Injektor die parent
Saatguts und der child
Eigenschaften aufs neue, das heißt, dass wenn n
Laschen in dem Behälter sind, 2 * n
Initialisierungen passieren.
Die Frage:
Ist Dependency Injection eine teure Operation in Angular2 +? Oder ist es nur ein Verweis, also billig?
"Wenn es n Tabs im Container gibt, werden 2 * n Initialisierungen passieren", nicht immer. Bei DI geht es auch um das Lifetime Management, daher werden abhängig von der Konfiguration nur Referenzen weitergegeben und keine neuen Instanzen erstellt –