De lo contrario, no puedes hacer búsquedas. Y no puedes minificar métodos de clase porque tienes que llamar a los métodos por su nombre. Y así, si los acortas, ya no funcionan. Esto realmente significa que el diseño de la API importa mucho, y cómo diseñas tus programas para que puedan ser minificados más fácilmente puede afectar mucho el tamaño de tu paquete.
Aquí hay un ejemplo de los métodos de clase. A la izquierda hay una clase API de ejemplo, algo que solíamos usar en el Sentry SDK, pero lo des-Sentryfiqué mucho. Y a la derecha aquí hay una versión minificada. Lo embellecí para que mantuviéramos el espacio en blanco para que sea más fácil de leer. Y puedes ver que en la versión minificada, muchos de los nombres aún se mantienen porque todos estos métodos de clase no pueden ser minificados. Son parte de la API pública de esta clase API. Incluso cosas que consideramos privadas como encoded auth aún no se minimizan debido a cómo funciona JavaScript.
Entonces, ¿cuáles son algunas estrategias para que podamos escribir código más amigable con la minificación? Bueno, en primer lugar, intenta evitar búsquedas de objetos profundamente anidadas y patrones de constructor. A la izquierda aquí, puedes ver que tenemos esta búsqueda complicada en event.exception.values.type. Y queremos asegurarnos de que todo exista correctamente así que hacemos esta operación booleana. Pero todos estos valores, exception.values.type, y por supuesto el SentryError aquí, son completamente inminificables. Y así terminamos con mucha información redundante en nuestro paquete. Dado que ya estamos usando un try catch, podemos simplemente acortar esto a una sola línea. Y si encontramos un error de tipo, irá al bloque catch en su lugar.
Otra forma de escribir código más amigable con la minificación es usar config para modificar basado en regex. Entonces, por ejemplo, si volvemos al ejemplo de los métodos de clase aquí, si decimos, oye, todo lo que comience con el guion bajo debería ser minificado, ahora podemos minificar encoded auth y todos sus usos aquí. La mayoría de los empaquetadores tienen config que te permiten configurar modificaciones personalizadas basadas en alguna expresión regular. Por último, y aquí es donde entra el componente de diseño de la API, puedes usar funciones y objetos en lugar de clases. Y esto significa que las clases, por supuesto, tienen toda su API pública y cada método, método público, no puede ser minificado. Pero si usas funciones y objetos, los nombres de las funciones pueden ser minificados porque son simplemente métodos de nivel superior y todo lo que les importa es dónde se llaman y con qué se llaman. Incluso mejor que los objetos, porque, de nuevo, las claves de los objetos no pueden ser minificadas, es realmente usar arrays. Así que si tienes alguna estructura de datos interna que sabes que se usa comúnmente, entonces quizás hacer un array en lugar de un objeto. Los hooks de React realmente hacen esto muy bien. Cosas como useState y useReducer devuelven un array. Así que estos argumentos de array estructurados pueden ser realmente minificados por un empaquetador. Un gran ejemplo de comparar bibliotecas amigables con la minificación es Zod versus ValleyBot.
Comments