Hola a todos. ¿Cómo están? Mi nombre es Evitar Alus. Soy un ingeniero frontend en Meda en Tel Aviv y soy el autor de varios paquetes de código abierto, uno de los cuales es este pequeño paquete genial llamado emoji-pkreact que te permite poner un emoji-pkreact directamente en tu aplicación React en la web con facilidad.
Y hoy quiero compartir con ustedes un pequeño truco que se me ocurrió para mejorar la búsqueda y el performance en las aplicaciones React y los paquetes React. Y cuando comencé a construir emoji-pkreact allá por 2017, pensé que sería bastante sencillo construir un componente emoji-pkreact con todas las características de un emoji-pkreact esperado que también fuera eficiente y fácil de usar. Y casi inmediatamente comencé a recibir problemas sobre el performance, por ejemplo, que la búsqueda es extremadamente lenta y, obviamente, mi respuesta fue que no se reproduce. Obviamente, eso estaba mal.
La búsqueda era realmente lenta. Y la razón es bastante comprensible. Verás, tenemos aproximadamente 1800 emojis diferentes que se muestran en el Emoji Picker. Y cuando interactúas con cada uno de ellos, tienes algunas actualizaciones de estado. Entonces, por ejemplo, cuando pasas el cursor o cuando escribes algo en la búsqueda, haces cambios en el DOM y en los elementos. Y cuando tratas con tantos elementos, y cuando tienen tantos estados diferentes en los que pueden estar, puede ser bastante intenso trabajar con ellos. Y especialmente aquí, vemos que la barra de búsqueda está aquí arriba y los emojis están allí. Lo que significa que están muy distantes en el árbol React. Lo que significa que tenemos que tener un estado de Emoji Picker React casi global para gestionar las capacidades de filtrado. Y luego, cuando escribimos algún carácter dentro del Emoji Picker, actualizamos el estado, ejecutamos algún algoritmo de búsqueda que intento hacer eficiente, y luego React va y hace la diferenciación del DOM y luego solo aplica los cambios al DOM, y cada uno de estos pasos lleva tiempo. Y cuando tratamos con 1800 emojis, eso lleva mucho tiempo.
Ahora, si miras ahora, parece bastante inmediato. Funciona bastante rápido, pero quiero mostrarte solo por un segundo cómo se sentía antes de que Emoji Picker React tuviera estas capacidades y la búsqueda mejorada. Así que escribiré algo y notarás un ligero retraso, incluso en mi MacBook Pro. ¿Lo sentiste? Hubo algún retraso entre mi carácter siendo escrito y los cambios apareciendo en la pantalla, y eso es un MacBook Pro de alta gama. Intentemos hacer algunas desaceleraciones, así que 6x de desaceleración para simular una máquina más antigua, o más lenta, y veamos cómo se siente realmente para un usuario en la naturaleza. ¿Y viste eso, verdad? Eso no es ideal. Tenemos que arreglar esto. Solo para mostrarte lo que realmente está pasando cuando escribimos cada carácter, cuando escribimos cada carácter, realmente salimos y volvemos a renderizar todo. Y la razón es, nuevamente, que tenemos ese estado de árbol de nivel superior y que realmente tenemos que modificar todos los elementos en el DOM. ¿Pero realmente tenemos que hacerlo? Y esto es lo que quería averiguar. ¿Realmente tengo que manipular el DOM y cambiar todos los emojis solo para hacerlos desaparecer? ¿O tal vez puedo de alguna manera saltármelo? Así que fui a mirar los elementos emoji reales que creé y lo que tengo aquí, cada emoji es un componente de botón o un elemento de botón y tienen una imagen dentro de ellos. A veces tienen un span con un carácter emoji.
Comments