BlogContact

¡Es hora de la vista previa compatibilidad de Ivy!

Michael Prentice
Jun 8, 2019

Original in English by Stephen Fluin

Estamos buscando desarrolladores que deseen probar cosas nuevas (con algunas limitaciones) y que deseen compartir tus experiencias con nosotros. Si estás interesado, siga los pasos a continuación y háganos saber en qué problemas se encuentra.

angularCompilerOptions: { enableIvy: true }

Esta vista previa se destina principalmente a validar la compatibilidad con versiones anteriores, ya que las mejoras de rendimiento y tamaño del paquete aún están en curso.

El plan es asegurarse de que la mayoría de las aplicaciones de Angular sigan funcionando sin cambios significativos, y luego enfocarse en aprovechar las mejoras al framework subyacente.

Estado Actual

Hemos logrado un importante hito de estabilidad con la compatibilidad con versiones anteriores de Ivy. Basándonos en nuestras pruebas en miles de suites de prueba dentro de Google (el 97% de las suites de prueba se pasan en Google), estamos razonablemente seguros de que la mayoría de las aplicaciones funcionarán sin cambios en todo el ecosistema. Tenemos varios problemas conocidos en los que estamos trabajando, pero esperamos que haya una larga cola de problemas más pequeños que solucionar.

Ahora que hemos alcanzado este hito, necesitamos tu ayuda para identificar e informar estos problemas. Inscríbete en la vista previa, pruébelo y háganos saber qué se rompe.

Hay tres cosas que vamos a hacer con los problemas que se nos informan:

  1. Corríjalos — siempre que sea posible, queremos utilizar esta entrada para abordar los problemas de compatibilidad con versiones anteriores.

  2. Reconozcalas — algunos de los problemas informados serán de aplicaciones que se basan en comportamientos no especificados o que no forman parte de nuestra API pública. Es probable que no podamos revertir estos cambios, pero queremos entender y ayudar a los desarrolladores a identificar si se están ejecutando en alguno de estos.

  3. Automatizarlos — si hay problemas o patrones a gran escala que descubrimos en todo el ecosistema (como una dependencia o un código problemático escrito por un esquema popular), queremos crear esquemas y reglas de TSLint para automatizar las migraciones.

¿Qué pasa con el rendimiento y el tamaño del paquete?

Todavía estamos trabajando en mejoras para el tamaño del paquete y el rendimiento del tiempo de ejecución. Cuando actualice hoy, todavía no verá todos estos beneficios.

Actualmente estamos viendo que el código generado y las aplicaciones “Hello World” son más pequeñas, pero en algunos casos, Angular en sí es más grande. Estos son algunos de los primeros resultados que hemos visto al actualizar las aplicaciones a Ivy:

ng new my-app @ 8.1.0-next.1

Antes de Ivy: Paquete principal (135 KiB)

Con vista previa de Ivy: Paquete principal (122 KiB)

Real World Angular @ 8.1.0-next.1

Antes de Ivy: Paquete principal (358 KiB)

  • Lazy Chunks (7.7–34 KiB)

Con vista previa de Ivy: Paquete principal (400 KiB)

  • Lazy Chunks (3.3–27 KiB)

Ahora estamos trabajando para reducir el tamaño del framework, de modo que hemos reducido el tamaño de los paquetes para aplicaciones reales en casi todos los casos antes de que Ivy sea el valor predeterminado. También serán posibles beneficios adicionales, ya que ofrecemos nuevas formas de arranque que van a reducir el tamaño del framework en tu paquete principal.

Haremos más anuncios sobre el rendimiento y los hitos del tamaño del paquete para las aplicaciones del mundo real en los próximos meses a medida que nos acerquemos a activar a Ivy de forma predeterminada para todas las aplicaciones.

¿Qué debo esperar ver hoy?

Tu aplicación debe construir y funcionar como lo hace hoy. Notarás los siguientes beneficios que se deben al nuevo compilador y conjunto de instrucciones:

  • Mejoras menores en el tamaño del paquete: ng new es un 10% más pequeño y el código generado debería ver una reducción de ~25% en el tamaño

  • Mejor rendimiento de compilación: la compilación incremental, la reconstrucción en modo AOT es un 40% más rápida

  • Mejor rendimiento de las pruebas: en Angular, hemos visto que las pruebas de unidades de framework son 1.5 veces más rápidas, las pruebas de unidades de Angular Material son 2.7 veces más rápidas y el uso de memoria en las pruebas de unidades de Angular Material se ha reducido en un 81%

  • Instrucciones más depurables — Agregue puntos de interrupción a HTML y pase a través de la representación de la plantilla, y depure más fácilmente la detección de cambios porque puede pasar a la función de plantilla en el traza de la pila y ver dónde se encuentra

También hemos solucionado muchos errores de larga data, hemos mejorado el comportamiento confuso y hemos solucionado algunos problemas de rendimiento.

  • Los enlaces de clase siempre anulan otras clases (7289)

  • ContentChildren consultas seleccionar nodo de host (10098)

  • Las consultas tienen un tiempo de resolución inconsistente (21800, 25961)

  • La bandera de los descendientes funciona inconsistentemente (14769, 27504)

  • La detección de cambios aún se está ejecutando para los componentes separados que se proyectan (21324)

  • El comportamiento de referencia de la plantilla local es inconsistente / confuso

  • Ya no es necesario agregar componentes a la lista de componentes de entrada (28826)

¿Cómo me inscribo?

Hemos publicado una guía aquí: angular.io/guide/ivy

Siempre debe ejecutar la última versión de Angular desde npm (etiquetada a next) siempre que use Ivy. Estaremos haciendo cambios frecuentes en los próximos meses. Puede usar ng update para obtener la última versión de la siguiente manera:

ng update —-next @angular/core

Una vez que estés en la última versión, actualiza tu src/tsconfig.app.json para incluir “enableIvy": true bajo un nivel superior angularCompilerOptions llave.

Cuando ejecutas ng build, haremos la compilación de compatibilidad Angular (ngcc) de tu carpeta node_modules/ y actualizaremos todos tus archivos de metadatos en un formato que podamos convertir en instrucciones Ivy.

Danos Tu Opinión

Nos estamos acercando rápidamente a un futuro en el que los beneficios de Ivy son automáticos y universales para todos los desarrolladores y el Proyecto Ivy llega a una conclusión. Mientras tanto, abra un problema o comuníquese con devrel@angular.io para darnos tu opinión acerca de tus experiencias con la vista previa.

Michael Prentice
Jun 8, 2019