Y hace un tiempo, notamos el siguiente patrón. Vimos que teníamos muchos archivos que se veían así. Exportaban objetos anidados que al final del día solo contenían cadenas. Por eso los llamamos archivos de constantes.
Y los archivos que referenciaban los archivos de constantes solo usaban uno o dos valores de estas constantes. Así que probablemente estés pensando, está bien, tengo Tree Shaking exactamente para este caso, y si no estás familiarizado con Tree Shaking, entonces es un algoritmo muy común que la mayoría de los empaquetadores usan hoy en día para eliminar los valores no utilizados de tu bundle, así que terminarás exactamente con lo que necesitas en tu bundle. Pero en nuestro caso, Tree Shaking no funcionó correctamente porque usamos objetos, y Tree Shaking no maneja bien los objetos. Así que terminamos con algo como esto en nuestro bundle, y ves que todas las partes rojas son en realidad archivos de constantes.
Y el problema con eso es que tenemos muchos archivos de constantes dentro de nuestro bundle. Esto significa que tenemos más JavaScript del que realmente necesitábamos. Esto aumentó el tamaño de nuestro bundle y lo hizo más pesado para la red, por lo que nuestra aplicación se volvió más pesada de cargar. Además, todos estos archivos se mantenían en memoria y nunca se eliminaban, por lo que aumentó nuestra huella de memoria más de lo que queríamos. Y se sentía mucho como esto. Teníamos un pequeño fragmento de código que llevaba un gran equipaje con él.
Así que teníamos un sueño. Teníamos un sueño de que mientras construimos el bundle, encontraremos los valores de referencia de los archivos de constantes, eliminaremos las referencias, y las reemplazaremos con los valores reales, y luego podemos eliminar la importación de estos archivos de constantes y terminar exactamente con los valores que necesitamos dentro de nuestro bundle. Así que sabíamos lo que queríamos hacer, pero no estábamos seguros de cómo hacerlo. Sabíamos que queríamos evitar grandes refactorizaciones porque teníamos mucho código que necesitaba ser actualizado, y sabíamos que queríamos evitar la actualización manual del código porque, de nuevo, era mucho código, y necesitábamos hacerlo programáticamente para evitar errores que los humanos pueden cometer. Así que después de pensar un poco, entendimos que podíamos usar ASTs, pero espera, los ASTs no son muy comunes, ¿verdad? Piensa por un momento si alguna vez has usado ASTs antes.
Así que la verdad es que todos usamos ASTs, y simplemente puede que no lo sepamos, y lo veremos en un segundo. Así que los ASTs son árboles de sintaxis abstracta. Es una estructura de datos usada para representar un fragmento de código, y la mejor manera de entenderlo es mediante una herramienta llamada AST Explorer. AST Explorer es una herramienta en línea gratuita, y puedes poner un fragmento de código en ella, como el que está aquí, y te mostrará su AST. Puede parecer aterrador a primera vista. Realmente lo es, pero el poder de AST Explorer es que puedes seleccionar un fragmento de código, y te mostrará su nodo correspondiente en el AST. Así que, por ejemplo, puedes ver aquí que tenemos un nodo de literal de cadena con el valor de hey, Berlin. También podemos seleccionar esta parte aquí para ver que es un nodo de declaración de variable con el nombre de hi, el valor de hey, Berlin, y también podemos ver que su tipo es const. Es importante entender que los ASTs realmente todos. Muchas herramientas usan AST. Si piensas en ESLint, PostCSS, Prettier, Webpack, y muchas otras herramientas, todas usan AST para leer y transformar código programáticamente.
Comments