Puedes imaginar que, si tenemos que recorrer este árbol para descubrir todos los cambios de estado, esto podría llevar algún tiempo. Las aplicaciones del mundo real son mucho más grandes que estos 107 componentes aproximadamente. Tienen miles de componentes en tiempo de ejecución.
Angular estaba pensando qué podíamos hacer para optimizar la detección de cambios en el sistema de reactividad. Consideramos expandir nuestro compilador para tener un seguimiento de dependencias estáticas, pero decidimos que no era el camino correcto porque introducía cierta magia que podría generar desafíos al depurar. También exploramos las señales. Nos unimos al club de las señales, junto con Vue, Solid, Svelte y otros. Dentro de las señales, simplemente envuelves el estado local del componente dentro de una señal. A partir de ahí, puedes leerlo dentro de tus plantillas, y esto es suficiente para notificar al framework, para que el framework sepa exactamente dónde se está utilizando este estado, de modo que cuando actualices el estado, el framework pueda ir allí y realizar la detección de cambios, digamos, solo en esta parte particular de tu componente.
Cuando observas el árbol de componentes más grande y, digamos, actualizamos item.quantity y lo establecemos en uno con una señal, solo iremos a los componentes que hayan leído la señal. En este caso, digamos que estos dos componentes, y el resto, no tenemos que recorrerlos, por lo que esto mejora significativamente el rendimiento en tiempo de ejecución.
Las señales se hicieron populares no solo en la comunidad externa, sino también dentro de Google. En Google, tenemos dos frameworks para el desarrollo de aplicaciones web que están disponibles en general. Tenemos Angular y WIS. Angular se ha centrado más en experiencias empresariales, y WIS en clientes de consumo. Digamos que la búsqueda de Google se construye con WIS, Google Photos, Google Drive y más. En la terminología externa de los frameworks externos, puedes pensar que WIS es más similar a Eleventy o Quick. De hecho, WIS inventó el concepto de razonabilidad hace diez años. Originalmente, estos dos frameworks ocupaban segmentos muy diferentes, pero con el tiempo, notamos cómo estos requisitos para las aplicaciones que estábamos construyendo con Angular y WIS comenzaron a fusionarse. Las personas que construyen aplicaciones con Angular querían más de las características de Angular. Las personas que usaban WIS querían algunas de las características de experiencia de desarrollo de Angular. Comenzamos a colaborar juntos de cerca.
Fue mi responsabilidad descubrir qué código podíamos compartir. Estaba en el canal de chat de Google en el canal de WIS, y vi algo como esto. Definitivamente no fabriqué la captura de pantalla ayer. WIS estaba trabajando con YouTube para reescribir toda su interfaz de usuario y pasar de una implementación basada en el DOM virtual heredado a WIS, y estaban explorando señales para una reactividad detallada. Angular, por otro lado, estábamos diseñando la implementación de señales de Angular en ese momento, así que decidimos unirnos y construir una solución juntos. YouTube adoptó las señales de Angular a través de WIS, y actualmente maneja el 100 por ciento de su tráfico web móvil de YouTube. Notaron algunas mejoras. Por ejemplo, en las salas de estar, es decir, en las Smart TVs, vieron una latencia de entrada aproximadamente un 35 por ciento mejor en las TVs de gama baja, y al deslizar en YouTube web móvil, notaron 60 fotogramas por segundo en comparación con la implementación heredada del DOM virtual que proporcionaba 25 fotogramas por segundo. Al ver que estas señales realmente funcionan, y funcionan en Angular y WIS, y podemos compartir la misma implementación de señales exacta, nos acercamos a los organismos de estandarización y a los representantes de otros frameworks que también han estado utilizando señales.
Comments