métricas que son útiles de recopilar. Entonces, ¿cómo recopilamos realmente estos datos? La forma principal en que lo hacemos es a través de una herramienta llamada TuxScanner. TuxScanner es una herramienta de análisis de código estático que examina nuestros archivos individuales de código fuente sin ejecutarlos y mide cómo se utiliza Tux en la práctica y envía estos datos a una API para que podamos analizar cómo se utiliza Tux. Comenzamos con un archivo de código fuente, lo analizamos en un AST, que es solo una representación en forma de árbol del código fuente, y luego evaluamos un conjunto de métricas en ese AST, y eso nos dará puntuaciones. Por ejemplo, podría ser una cobertura de componentes del 80% antes, o tal vez se estén utilizando 12 componentes obsoletos, o algo similar a eso. Simplemente nos recopila un montón de puntuaciones, las conglomeramos todas juntas y las enviamos a la API para que podamos ver cómo se está utilizando Tux en todos nuestros archivos de código, y filtrar a lo largo del tiempo, por plataforma, por métrica, y demás. Para profundizar un poco más en cómo funciona el escáner. Comenzamos analizando los archivos de código fuente en AST, árboles de sintaxis abstracta, que es solo una representación en forma de árbol del código fuente, y muestra cómo se relacionan todas las construcciones del lenguaje. Por ejemplo, los elementos JSX relacionados con el atributo del nombre de la clase y tienen un árbol basado en eso. Y esto nos permite evaluar un conjunto de métricas en ellos. Entonces, una métrica es solo una función que toma un conjunto de AST, los recorre y produce un conjunto de puntuaciones. Y la puntuación es simplemente el número de casos buenos, las cosas que estamos haciendo bien, el número de casos malos, las cosas que estamos haciendo mal y que necesitamos mejorar para mejorar nuestra puntuación. Los sitios de llamada de los casos buenos y malos, que son solo los enlaces a los nodos, generalmente son elementos JSX, pero también podrían ser una declaración de importación o algo en el código donde algo está saliendo mal. Y luego la fuente de cobertura, y luego lo conglomeramos todo juntos, lo enviamos a la API para que podamos filtrar por tiempo, por paquete y demás.
De acuerdo, ahora que TuckScanner ha recopilado todos estos datos, ¿cómo los utilizamos? Entonces, en TikTok, las cosas crecen rápidamente, y nuestra biblioteca de componentes no es una excepción. Necesitamos poder evolucionar rápidamente para mantenernos al día con la rápida tasa de cambio. Y queremos poder hacer eso para mantenernos ágiles y seguir evolucionando. Entonces, necesitamos poder mantener lo que funciona y desechar y rehacer lo que no funciona. Ahora, esto es una buena verdad para cómo se debe mantener el código, pero no se practica a menudo. Y eso se debe a que introducir todos estos cambios disruptivos todo el tiempo no es divertido para los desarrolladores. Les dificulta la vida e introduce mucho mantenimiento. Pero no podemos ver estas cosas como una carga de mantenimiento. Siempre debemos esforzarnos por introducir cambios disruptivos para alcanzar esa forma platónica asintótica de lo que debería ser una biblioteca de componentes, y no podemos abandonar eso por el bien de la estabilidad. Debemos mantenernos ágiles. Entonces no debemos tener miedo de introducir cambios disruptivos en nuestros componentes. De hecho, queremos hacerlos regularmente. Debemos aceptar los cambios disruptivos. Esto es fácil de decir en teoría, pero difícil de hacer en la práctica. Y en TikTok, hemos hecho un esfuerzo concentrado para simplificar nuestra arquitectura y facilitar esto. Un ejemplo de ello es el uso de un monorepo. Y en un monorepo, casi todos nuestros consumidores son
Comments