Y eso fue un gran caballo de Troya para hacer un poco de trabajo de rendimiento. Así que lo que hicimos fue tomar este modelo con Zustand que llamaba a todos los suscriptores todo el tiempo, y en su lugar, pasamos a átomos en los que ahora finalmente podemos simplemente llamar al procesamiento en ese átomo específico y ser mucho más precisos con una suscripción. Y para probar que este era el caso, simplemente hicimos un pequeño sandbox, como un repositorio diferente comenzado desde cero. Y parecía muy prometedor, como un enfoque con Redux a un segundo para la interacción, mientras que un enfoque con Jyoti tomó solo 70 milisegundos, lo cual fue mucho, mucho más rápido. Así que esto fue definitivamente un éxito. Implementémoslo. Y fuimos e hicimos este gran refactor para adoptar Jyoti en lugar de Zustand.
Pero luego nos dimos cuenta de que todavía teníamos que mantener Redux porque de lo contrario sería demasiado de una reescritura. Así que todavía tenemos eso en cuenta. Y luego nos dimos cuenta de que, bueno, cada nodo no es independiente. Podemos tener un nodo que es hijo de otro nodo, de modo que tienes que actualizar juntos. Así que tendríamos que escribir un código que sea capaz de rastrear cada dependencia. Así que no, eso no habría sido posible. Y luego nos dimos cuenta de que algunas cosas que son realmente simples, como obtener el valor actual de manera transitoria, o obtener el valor de todos los nodos al mismo tiempo se volvió demasiado complicado. Así que resultó que tuvimos que sortear las limitaciones de Jyoti. Y después de la migración, fue peor que Zustand, lo cual fue divertido. Así que lo que pasó es que lo revertimos. Pero en realidad, no, solo revertimos los cambios de Jyoti porque, ya sabes, cuando hicimos esta gran migración, nos vimos obligados a hacer refactores para adaptarnos a este nuevo modelo de datos. Y estos refactores que hicimos fueron realmente útiles. Así que logramos vender un mejor rendimiento con una nueva biblioteca de gestión de estado que no existía. Y obtuvimos un buen refactor en el proceso que nos ayudó enormemente en el futuro.
¿Cómo? Alguien dentro de la empresa hizo una pregunta extraña, bueno, ya sabes, como si un solo hilo que procesa todos los datos es lento, ¿qué pasa si divides los datos en múltiples hilos y los procesas independientemente? Bueno, no realmente. Pero la pregunta era, ¿qué pasa si dividimos la tienda de Zustand? Como si una tienda tuviera que disparar todas las suscripciones, ¿qué pasa si dividimos la tienda en tiendas Zustand más pequeñas para que cada una tenga su propio subconjunto de nodos y tenga que llamar a menos suscripciones? Bueno, resulta que alguien más ya habló de esto. Y de hecho, entonces Abramov dijo que es una mala idea, a menos que tengas problemas de rendimiento. Como si tuvieras miles de elementos que están en pantalla al mismo tiempo, eso somos nosotros. Así que eso es exactamente lo que hicimos. Veamos cómo funciona. En primer lugar, hicimos una función hash, que, dado un nodo, te da cuál es la partición. Así que luego podemos mapear de manera constante, siempre el nodo a la partición. Luego creamos una tienda Zustand para cada una de esas particiones.
Comments