El rendimiento no es prescriptivo en el sentido de que no puedo darte una lista de verificación de cosas como puedo hacer con, ya sabes, como Lighthouse. No puedo decirte, bueno, ya sabes, ¿haces la división de paquetes y pones esto en la cabeza y esto al final? Ya sabes. Muchas veces es un problema que has creado con la forma en que lo has codificado. Y tienes que desenredarlo, ¿verdad? Es algo en lo que tienes que ser ingenioso. A veces es la realidad de los requisitos de la aplicación. Y luego tienes que encontrar un compromiso o una forma astuta de hacer menos trabajo. ¿Verdad? Cuando optimizas el rendimiento, si quieres que vaya mejor, haces la menor cantidad de trabajo posible. No tú personalmente, tu aplicación. Quieres hacer la menor cantidad de trabajo posible para alcanzar tu objetivo. De lo contrario, tendrás ineficiencias, y a gran escala, explotarán. ¿Verdad?
Hay algunas cosas semi-prescriptivas en las que puedo entrar. ¿Verdad? Obviamente, tiene que aplicarse a tu situación, pero... Cosas como usar un bucle for regular. Si dices, oye, esto tarda demasiado, ¿cómo puedo hacer que vaya más rápido? ¿Dónde puedo ganar un poco aquí? Si estás aquí haciendo todas estas cosas elegantes con todos estos mapas encadenados y todo esto, esto y aquello, si lo haces en un bucle for regular, a la escala en la que importaría, definitivamente puedes recuperar algo de tiempo usando eso. Muchas operaciones de matriz, ¿verdad? Como si estás haciendo una búsqueda en una matriz o algo así, ¿verdad? Uno de tus mayores enemigos en la optimización del rendimiento es la iteración. Especialmente la iteración innecesaria. Así que si tienes una matriz de, digamos, 500,000 elementos, y vas a hacer una búsqueda en ella, o haces cualquiera de estas operaciones de prototipo de matriz que recorrerán todo el conjunto hasta que salga o se complete, eso es costoso, ¿verdad? Así que si tienes, digamos, un ID, digamos, tengo este ID, quiero encontrar esta fila que tiene este ID. Puedes crear una tabla de búsqueda. Y una tabla de búsqueda es un término estúpido para, quiero decir, tal vez no sea un término estúpido, pero si, ya sabes. Es un objeto, ¿verdad?, donde la clave, ¿verdad?, sería tu clave, como un ID, como la cosa que quieres buscar, ¿verdad? Y luego podrías tener el valor de eso como la posición de índice de tu cosa en la matriz, ¿verdad? Así que es una forma muy económica de encontrar esa cosa, ¿verdad? Entonces estás diciendo, oh, bueno, tengo que actualizar el ID de la cosa igual a esto, digamos, oye, busca dónde está. Y es solo, bap bap, bap bap, y luego estás listo. En lugar de decir, encuentra con una función de predicado que busca el ID o algo así. Otra cosa que debes tener en cuenta, especialmente, especialmente costosa, es la creación de un montón de objetos nuevos. Y eso son objetos y matrices, ¿verdad? Hay muchas cosas elegantes sucediendo en el desarrollo en estos días con ES6 o Next o como sea que lo llamemos en estos días, donde se usan spreads todo el tiempo y los spreads crean nuevos objetos, ¿verdad? Así que si estás lidiando con cosas en la escala de cientos de miles de cosas, y estás creando nuevos objetos, lo que eso va a hacer es forzar la recolección de basura y también los costos de asignación, pero eso va a arruinar tus cosas, ¿verdad? Si puedes hacer una mutación directa, y sé que es una palabra sucia, pero si puedes hacer una mutación directa, puedes obtener algunos ahorros. Una alternativa es usar algo como Imr, donde tienes compartición estructural, ¿verdad? Donde no se realiza una clonación para hacer una actualización, ¿verdad? No es necesariamente una mutación o imperativo, pero es una forma de hacerlo que es mucho más barata. Una cosa realmente divertida de la que quiero hablar por un segundo es el rendimiento percibido, ¿verdad? Así que hay un rendimiento donde las cosas son realmente lentas y realmente bloquean el hilo principal, pero también hay escenarios en los que puedes hacer que las cosas parezcan más rápidas sin que realmente lo sean. Y puedes hacer eso desactivando la animación en muchos casos, ¿verdad? Así que si, tenía una aplicación en la que la estaba rediseñando y la gente decía, wow, ahora va súper rápido. ¿Qué hiciste? Y simplemente desactivé la animación, ¿verdad? Si tienes esta cosa de hover animado, aunque se vea genial, ¿verdad?, la percepción mientras lo recorres es que es más lento. Si todo es retroalimentación instantánea, se siente más rápido. Así que el rendimiento percibido, ya sabes, es como volver a la suspensión con la cosa del spinner de carga.
Comments