Quelle est la différence entre le mode de production et le mode de développement en Angular2?

pour une raison quelconque, je dois lancer mon application en mode production. Quelle est la différence entre ces modes?

76
demandé sur Saurabh Palatkar 2016-01-19 08:03:30

2 réponses

en mode développement, la détection de changement effectue un second passage immédiatement après le premier passage et produit une erreur si une valeur liée a changé entre le premier et le second passage. Cela aide à localiser les bogues où la vérification des valeurs a des effets secondaires ou des champs ou des fonctions ne renvoient pas la même valeur lors d'appels ultérieurs, ce qui sape la détection de changement D'Angular.

en mode développement, lors de la deuxième détection de changement, Angular fait aussi un objet profond des comparaisons qu'il ne fera pas en production pour détecter les changements de modèle qui sont rejetés.

mise à jour:

en mode développement, un indice est également imprimé sur la console lorsque le service D'assainissement HTML enlève les valeurs des reliures [innerHTML]="..." ou [ngStyle]="..." . Voir aussi: dans RC.1 Certains styles ne peuvent pas être ajoutés en utilisant la syntaxe de liaison

64
répondu Günter Zöchbauer 2017-05-23 12:34:47

The docs for application Ref.tick() de l'état:

en mode développement, tick() effectue également un deuxième cycle de détection de changement (TTL=2) pour s'assurer qu'aucun autre changement n'est détecté. Si des modifications supplémentaires sont détectées au cours de ce second cycle, les fixations dans l'application ont des effets secondaires qui ne peuvent pas être résolus en une seule passe de détection de changement. Dans ce cas, angulaire jette une erreur, car une application angulaire ne peut que avoir une passe de détection de changement pendant laquelle toute la détection de changement doit être terminée.

la raison pour laquelle nous ne pouvons pas avoir de changements supplémentaires est que dans le mode de production, la détection de changement ne s'exécute qu'une seule fois, ce qui signifie que chaque composant dans l'arbre de composants est examiné une seule fois (TTL=1)... depuis le haut, en profondeur-premier ordre. Ainsi, si, par exemple, un changement à un bien d'intrant d'une composante enfant entraîne un changement à un autre bien que la composante parent a lié dans un afficher/modèle le composant parent de la vue ne sera pas mis à jour (en raison de la détection de changement de ne pas revoir le composant parent dans le mode de production... en raison de la traversée de l'arbre" one pass"). Il ne sera mis à jour que la prochaine fois qu'un événement se produit et que la détection change de nouveau -- mais c'est trop tard!

voici un Plunker qui viole la règle – un composant enfant a une méthode set sur un bien d'intrant qui: modifie une autre propriété d'entrée. Oui, c'est un exemple artificiel, mais il est plus facile à comprendre que la suivante:

un autre scénario où vous pourriez rencontrer ce problème est avec des pipes stateful. Découvrez cette réponse si c'est votre problème.

vous devez décrire votre problème (dans une autre question SO). Il devrait y avoir un moyen de le réparer.

32
répondu Mark Rajcok 2017-05-23 12:26:37