Búsqueda solo con CSS*: ¡Mejora el rendimiento de filtrado en React con CSS!

Rate this content
Bookmark

Trabajando en emoji-picker-react me encontré con un desafío: filtrar la lista de 1800 emojis provocaba un retraso significativo debido a las nuevas renderizaciones.

¡Aprendamos cómo solucioné esto solo usando CSS!

FAQ

Evitar Alus es un ingeniero frontend que trabaja en Meda en Tel Aviv y es autor de varios paquetes de código abierto, incluyendo el paquete emoji-pkreact para aplicaciones React.

Emoji-pkreact es un paquete desarrollado por Evitar Alus que permite integrar fácilmente emojis en aplicaciones web React.

Uno de los problemas iniciales con emoji-pkreact fue que la búsqueda de emojis era extremadamente lenta, lo que afectaba el rendimiento general del paquete.

Evitar mejoró el rendimiento utilizando un selector de atributos en CSS para filtrar emojis basados en sus nombres, evitando la necesidad de actualizar todos los emojis y reduciendo la manipulación del DOM.

Se utilizó un selector de atributos CSS que permite seleccionar elementos basados en el valor de un atributo, aplicando estilos de ocultación a los emojis que no coinciden con la consulta de búsqueda.

El desafío adicional fue manejar las categorías vacías que quedaban visibles después de filtrar los emojis. Esto se resolvió usando un nuevo pseudo selector CSS 'Has', que oculta las categorías que no tienen emojis coincidentes.

La estrategia de filtrado oculta automáticamente las categorías que no contienen ningún emoji que coincida con la consulta de búsqueda, mejorando así la claridad y la eficiencia de la interfaz.

La optimización resultó en una mejora significativa del rendimiento, casi eliminando los retrasos al buscar y filtrar emojis, incluso en dispositivos con menor capacidad de procesamiento.

Evyatar Alush
Evyatar Alush
11 min
12 Dec, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Evitar Alus, un ingeniero de frontend, comparte un truco para mejorar el rendimiento de búsqueda en las aplicaciones de React optimizando el algoritmo de búsqueda y reduciendo las actualizaciones del DOM. Los selectores de atributos CSS pueden usarse para filtrar y aplicar estilos basados en los valores de los emojis. Se puede crear un componente llamado Búsqueda CSS para mejorar el rendimiento de la búsqueda ocultando los emojis que no coinciden con la consulta de búsqueda. A pesar de algunas desventajas de rendimiento, esta solución funciona significativamente más rápido. Visita el sitio web de Evitar Alus o su cuenta de Twitter para ver más de su trabajo.

1. Mejorando el rendimiento de búsqueda en aplicaciones React

Short description:

Soy Evitar Alus, un ingeniero frontend en Meda en Tel Aviv y el autor del paquete de código abierto emoji-pkreact. Quiero compartir un truco para mejorar el rendimiento de búsqueda en las aplicaciones React. Inicialmente, enfrenté problemas de rendimiento debido al gran número de emojis y la compleja gestión del estado. La barra de búsqueda y los emojis estaban distantes en el árbol React, causando retrasos. Hice mejoras en el algoritmo de búsqueda y reduje las actualizaciones del DOM, lo que resultó en un rendimiento más rápido. Permíteme mostrarte la diferencia y explicar cómo lo logré.

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.

2. Uso de selectores de atributos CSS para filtrar

Short description:

Depende de la configuración del usuario. Cada emoji tiene una etiqueta de área y un nombre completo para la accesibilidad y la búsqueda. Podemos usar selectores de atributos CSS para aplicar estilos basados en estos valores. Actualicemos nuestro componente de búsqueda para usar el estado local en lugar del estado global. Al establecer un valor, podemos aplicar filtros al selector de emojis.

Depende de la configuración del usuario. Pero cada uno de ellos tiene una etiqueta de área para accessibility, y también el nombre completo del emoji, porque un emoji puede tener varios nombres para la búsqueda. Y dado el hecho de que ya tengo toda esta información en el DOM, ¿quizás puedo hacer uso de ella para el filtrado también? Aparentemente puedo y aparentemente es bastante fácil.

En CSS tenemos algo que se llama un selector de atributos que nos permite seleccionar un atributo arbitrario y basado en su valor aplicar estilos a los elementos. Así que esto significa que puedo establecer un selector basado en el nombre completo, la propiedad data o basado en la etiqueta de área. Y solo quiero mostrarles cómo se hace y lo fácil que es implementarlo.

Así que aquí está nuestro componente de búsqueda. Actualmente funciona actualizando el estado global pero en lugar de hacer eso, no lo hagamos más. Y en su lugar, tengamos algunos estados locales. Así que importemos useState. Así que import useState de React y luego establezcamos este estado. Así que const value setValue equals useState. Debería ser indefinido y también inicialicémoslo a indefinido o string. Sí, genial. Y ahora todo lo que tenemos que hacer aquí es establecer un valor y si volvemos a mirar el selector de emojis veremos que escribir no hace nada más que ocultar las categorías. Y la razón es porque aún no aplicamos nada de él.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Construir un Sistema de Diseño con React y Tailwind CSS
React Summit 2022React Summit 2022
27 min
Construir un Sistema de Diseño con React y Tailwind CSS
Top Content
Tailwind CSS, con su enfoque de utilidad primero, es conocido por acelerar el proceso de desarrollo. Combinándolo con el poder de React, veamos cómo puedes construir un sistema de diseño personalizado para tu proyecto para acelerarlo aún más, hacerlo escalable y también fácil de mantener.
Rethinking CSS - Introducing Stylex
React Finland 2021React Finland 2021
25 min
Rethinking CSS - Introducing Stylex
Top Content
CSS + superpowers - bloat. How Stylex creates a zero-cost abstraction that gives CSS superpowers.
Cómo lograr la composición de diseño en React
React Summit 2022React Summit 2022
8 min
Cómo lograr la composición de diseño en React
Usar CSS en esta era de componentes es difícil. Se han creado muchas herramientas para ayudarnos con este problema, pero todas fallan en el único problema que las herramientas nunca pueden resolver: ¿Qué componente debería encargarse de qué estilos? En esta charla, repasaremos estrategias sobre cómo construir diseños de manera componible.
Estilo Seguro para Paquetes de Componentes React: Vanilla Extract CSS
React Advanced Conference 2023React Advanced Conference 2023
19 min
Estilo Seguro para Paquetes de Componentes React: Vanilla Extract CSS
Desbloquea el poder del estilo seguro en paquetes de componentes React con Vanilla Extract CSS. Aprende cómo escribir estilos escalables y mantenibles sin esfuerzo, aprovechando CSS-en-Typescript. Descubre la integración perfecta de Vanilla Extract CSS y lleva tus componentes React al siguiente nivel.
Pasando de Css-In-Js en tiempo de ejecución a gran escala
React Summit 2023React Summit 2023
29 min
Pasando de Css-In-Js en tiempo de ejecución a gran escala
En esta charla, Siddharth comparte los desafíos que su equipo enfrentó al optimizar el css en js en tiempo de ejecución (styled-components) para mejorar el rendimiento. En GitHub, hay alrededor de 4000 componentes de React que contienen estilos, Siddharth profundiza en las razones para repensar la arquitectura de estilos, los desafíos enfrentados y las lecciones aprendidas al migrar una gran aplicación.
Construyendo Componentes de IU Perfectos con Variables CSS
React Summit 2023React Summit 2023
9 min
Construyendo Componentes de IU Perfectos con Variables CSS
Las variables CSS se han vuelto tan sofisticadas en los últimos años que ahora nos permiten hacer cosas que no son posibles con JavaScript. En esta charla relámpago, explicaré cómo los ingenieros de MUI están aprovechando el poder de las variables CSS en nuestra nueva biblioteca de componentes de React, Joy UI, para ofrecer componentes que se adaptan automáticamente a su estilo y estructura según el contexto en el que se renderizan.

Workshops on related topic