Frage Was ist der Unterschied zwischen Produktion und Entwicklung in Angular2?


Aus irgendeinem Grund muss ich meine App im Produktionsmodus ausführen. Was ist der Unterschied zwischen diesen Modi?


76
2018-01-19 05:03


Ursprung


Antworten:


Im Entwicklungsmodus führt die Änderungserkennung einen zweiten Durchlauf unmittelbar nach dem ersten Durchlauf durch und erzeugt einen Fehler, wenn sich ein gebundener Wert zwischen dem ersten und dem zweiten Durchlauf geändert hat. Dies hilft beim Lokalisieren von Fehlern, bei denen das Überprüfen von Werten Nebeneffekte oder Felder oder Funktionen aufweist, die bei nachfolgenden Aufrufen nicht den gleichen Wert zurückgeben, was Angulas Änderungserkennung unterläuft.

Im Entwicklungsmodus führt Angular während des zweiten Änderungserkennungslaufs auch einige tiefe Objektvergleiche durch, die in der Produktion nicht durchgeführt werden, um Modelländerungen zu erkennen, die nicht erlaubt sind.

Aktualisieren:

Im Entwicklungsmodus wird auch ein Hinweis an die Konsole ausgegeben, wenn der HTML-Sanitizer-Dienst Werte aus Bindungen entfernt [innerHTML]="..." oder [ngStyle]="...". Siehe auch: In RC.1 können einige Stile nicht mithilfe der Bindungssyntax hinzugefügt werden


63
2018-01-19 05:10



Die Dokumente für ApplicationRef.tick () Zustand:

Im Entwicklungsmodus tick() führt auch einen zweiten Änderungserkennungszyklus (TTL = 2) durch, um sicherzustellen, dass keine weiteren Änderungen erkannt werden. Wenn während dieses zweiten Zyklus zusätzliche Änderungen erfasst werden, weisen Bindungen in der App Nebenwirkungen auf, die nicht in einem einzelnen Änderungserkennungsdurchlauf aufgelöst werden können. In diesem Fall gibt Angular einen Fehler aus, da eine Angular-Anwendung nur einen Änderungserkennungsdurchlauf haben kann, während dessen die Änderungserkennung abgeschlossen sein muss.

Der Grund dafür, dass wir keine zusätzlichen Änderungen haben können, liegt darin, dass die Änderungserkennung im Produktionsmodus nur einmal ausgeführt wird, dh jede Komponente im Komponentenbaum wird einmal (TTL = 1) ... von oben, in der Tiefe, zuerst untersucht Auftrag. Wenn beispielsweise eine Änderung an der Eingabeeigenschaft einer untergeordneten Komponente eine Änderung an einer anderen Eigenschaft bewirkt, die die übergeordnete Komponente in einer Ansicht / Vorlage gebunden hat, Die Ansicht der übergeordneten Komponente wird nicht aktualisiert (weil die Änderungserkennung die Elternkomponente im Produktionsmodus nicht erneut besucht ... wegen der "Ein-Durchlauf" -Baumdurchquerung). Es wird nur aktualisiert, wenn das nächste Mal ein Ereignis eintritt und die Erkennungserkennung erneut ausgeführt wird - aber das ist zu spät!

Hier ist ein Plunker das verstößt gegen die Regel - eine Kindkomponente hat eine set Methode für eine Eingabeeigenschaft, die eine andere Eingabeeigenschaft ändert. Ja, es ist ein künstliches Beispiel, aber es ist leichter zu verstehen als das nächste:

Ein anderes Szenario, in dem Sie auf dieses Problem stoßen, ist Stateful Pipes. Auschecken diese Antwort Wenn das dein Problem ist.

Sie sollten Ihr Problem beschreiben (in einer anderen SO-Frage). Es sollte einen Weg geben, es zu beheben.


31
2018-01-22 23:28