Actualmente, Next.js está utilizando de cuatro a cinco compiladores Webpack para hacer todo este trabajo, uno para el cliente, para la renderización del servidor, para la renderización de borde, para varios componentes y un compilador de respaldo para mensajes de error. Todo este tipo de trabajo de orquestación ligera entre estos compiladores no es tan fácil. Está funcionando, pero es una fuente de errores, donde puedes cometer errores o olvidar algo, o la comunicación no funciona correctamente, y eso no es algo que queramos ser forzados a hacer.
Entonces, también hay algunos desafíos en el lado de WEPAC, así que WEPAC se construyó hace diez años, y todavía tiene la architecture de hace diez años donde las aplicaciones eran cientos de modules, y el web development escaló mucho en la última década, y, sí, entonces la architecture de WEPAC no se construyó realmente para este tipo de rendimiento de compilación incremental a gran escala. Eso es un problema, y no podemos solucionarlo fácilmente porque hay muchos plugins que dependen de la architecture de WEPAC, y es realmente difícil hacer cambios compatibles con versiones anteriores en la architecture, realmente no podemos cambiar la architecture mientras seamos compatibles con versiones anteriores. No queremos romper los casos de uso de todos cambiando la architecture de WEPAC, así que eso no es realmente una buena oportunidad para solucionar eso.
Por otro lado, solucionamos muchas cosas mientras trabajaba en Next.js en WEPAC para hacer más eficiente, pero tuvimos un límite en el tipo de optimización que podemos hacer sin reescribir todo. También hay otros desafíos como la invalidación de la caché. En muchos casos es demasiado sensible, así que como cambias algo y afecta, tiene que reconstruir una parte más grande de la aplicación, mientras que probablemente no está afectada. En un ejemplo, si cambias un comentario, ¿por qué tenemos que reconstruir el módulo? Podría ser más granular en lo que podemos almacenar en caché. Un problema de la architecture es este problema de costo de búsqueda en caché. Lo que hacemos al hacer una compilación incremental es que básicamente comenzamos de manera similar a una compilación completa, comenzamos a construirla, y para cada trabajo que queremos hacer primero verificamos si está en la caché, si ya está en caché, y luego podemos omitir ese trabajo, y eso suena genial, pero en esa scale, si buscas, como, 10,000 modules de modules en la caché, entonces tienes este serio costo de buscar cosas en la caché, y, sí, eso es un problema.
Pero, sí, estamos hablando de problemas de búsqueda como cuando estás hablando de unos segundos de reconstrucción. Si trabajas en el mundo nativo, podrías saber que tienen tiempos incrementales de minutos o algo así. ¡Sí, tenemos un problema realmente lujoso en el mundo del web development, supongo! Pero también hubo algunas oportunidades que podríamos abordar mientras trabajamos en un nuevo Bundler. Así que en mejor de los casos, tenemos esta herramienta llamada TurboRepo, y cuando la combinamos con Next.js, podemos aprender mucho el uno del otro. Next.js tiene este almacenamiento en caché granular genial, como si cambias un módulo solo reconstruyes un módulo y algunas cosas de plantilla. Pero en la herramienta TurboRepo, siempre tienes esta granularidad de almacenamiento en caché de comandos completos. Y luego TurboRepo puede aprender de Next.js al tener un almacenamiento en caché más granular, pero también puede aprender al tener un modo de observación más enfocado en el desarrollo donde puedes tener este tipo de experiencia de cosa de observación incremental por defecto. Pero por otro lado, Next.js puede aprender de TurboRepo. TurboRepo tiene esta característica genial sobre el almacenamiento en caché remoto, por lo que en realidad puede compartir tu caché con tu equipo y se sube a la cloud o es una solución autohospedada. Y luego puedes compartir eso con tu equipo y no tienes que reconstruir lo que tus colegas han construido. Eso es genial. Queríamos tener eso en Next.js, como compartir caché con el equipo y compartir caché con el despliegue para que no tengas que hacer todo el trabajo dos veces. Pero hay algunas nuevas oportunidades. He visto que muchos desarrolladores en realidad quieren tener más información sobre el proceso de compilación. ¿Cuál es el tamaño de la página de los componentes, cuál es el tamaño de las dependencias y cómo las solicitudes de extracción afectan el cambio de mi aplicación o el cambio de performance de mi aplicación. Este tipo de información. Y queremos ofrecer más de estos tipos. También relacionado con el rendimiento de la compilación, estadísticas meta, ¿por qué mi compilación es lenta o cómo afecta el tiempo de mi compilación, este tipo de estadísticas.
Comments