español - instalar angular 5
¿Cuál es la diferencia entre el modo de producción y desarrollo en Angular2? (2)
Por alguna razón, tengo que ejecutar mi aplicación en modo de producción. ¿Cuál es la diferencia entre esos modos?
En el modo de desarrollo, la detección de cambios realiza una segunda ejecución inmediatamente después de la primera ejecución y produce un error si algún valor vinculado ha cambiado entre la primera y la segunda ejecución. Esto ayuda a localizar errores donde la comprobación de valores tiene efectos secundarios o los campos o funciones no devuelven el mismo valor en llamadas posteriores, lo que socava la detección de cambios de Angular.
En el modo de desarrollo, durante la segunda ejecución de detección de cambios, Angular también hace algunas comparaciones de objetos profundos que no hará en la producción para detectar cambios de modelo que no están permitidos.
Actualizar:
En el modo de desarrollo, también se imprime una pista en la consola cuando el servicio de desinfección HTML elimina los valores de los enlaces
[innerHTML]="..."
o
[ngStyle]="..."
.
Consulte también:
en RC.1, algunos estilos no se pueden agregar mediante la sintaxis de enlace
Los documentos para ApplicationRef.tick() indican:
En el modo de desarrollo,
tick()
también realiza un segundo ciclo de detección de cambio (TTL = 2) para garantizar que no se detecten más cambios. Si se recogen cambios adicionales durante este segundo ciclo, los enlaces en la aplicación tienen efectos secundarios que no se pueden resolver en una sola pasada de detección de cambios. En este caso, Angular arroja un error, ya que una aplicación Angular solo puede tener un pase de detección de cambio durante el cual debe completarse toda la detección de cambio.
La razón por la que no podemos tener cambios adicionales es porque en el modo de producción, la detección de cambios solo se ejecuta una vez, lo que significa que cada componente en el árbol de componentes se examina una vez (TTL = 1) ... desde arriba, primero en profundidad orden. Entonces, si, por ejemplo, un cambio en la propiedad de entrada de un componente secundario causa un cambio en alguna otra propiedad que el componente primario ha vinculado en una vista / plantilla, la vista del componente primario no se actualizará (porque la detección de cambios no volverá a visitar el componente principal en modo de producción ... debido al recorrido del árbol de "una pasada"). Solo se actualizará la próxima vez que ocurra algún evento y la detección de cambios se ejecute nuevamente, ¡pero eso es demasiado tarde!
Aquí hay un
Plunker
que viola la regla: un componente secundario tiene un método
set
en una propiedad de entrada que modifica otra propiedad de entrada.
Sí, es un ejemplo artificial, pero es más fácil de entender que el siguiente:
Otro escenario en el que podría encontrarse con este problema es con las tuberías con estado. Mira esta respuesta si ese es tu problema.
Debe describir su problema (en otra pregunta SO). Debería haber una manera de arreglarlo.