Entonces, cuando hago clic en el texto donde, donde te encuentras en el menú desplegable. Primero tengo el renderizado del encabezado del editor. Entonces, el encabezado del editor se renderizó, si hago clic en él, puedo ver que se renderizó dos veces aquí y aquí. El encabezado del editor se renderizó dos veces. La primera vez tomó, entonces esta vez, 44 milisegundos, no es el tiempo del encabezado del editor, sino que es el tiempo del renderizado completo. Entonces, necesito hacer clic en esto para ver cuánto tiempo tomó. Entonces, la primera vez tomó 7 milisegundos, y la segunda vez también tomó 7 milisegundos. Entonces, se renderizó dos veces, x 7 milisegundos cada una, lo que significa que tomó 14 milisegundos en total. Muy bien.
A continuación, el siguiente componente que se renderizó fue el editor de widgets. El editor de widgets también parece haberse renderizado dos veces. Entonces, el editor de widgets se renderizó dos veces. x, la primera vez fueron 44 milisegundos, la segunda vez fueron 41 milisegundos. Solo voy a tomar, digamos, 42. Se renderizó dos veces x 42 milisegundos cada una, lo que nos da 84 milisegundos. Entonces, ese fue el primer renderizado, ¿verdad? Ahora he terminado con el primer renderizado. Echemos un vistazo al segundo renderizado. En el segundo renderizado, tengo la vista del panel de propiedades renderizando y tengo los widgets de la tabla, el componente de la tabla volviendo a renderizar. Entonces, la vista del panel de propiedades también se renderizó dos veces. Dos veces x 8, 29, 27, 28 milisegundos cada una, lo que nos da 56 milisegundos. Y luego el componente de la tabla, oh mira, la tabla se renderizó cuatro veces. Oh sí, claro. La tabla, la primera y la tercera vez, es parte de este renderizado del editor de widgets. Entonces, no sé, solo voy a escribirlo. Voy a anotar todos los renderizados porque si optimizamos la tabla, la optimizaremos en todas las cuatro. Entonces, el editor de widgets también obtendrá, como este renderizado también será más barato si optimizamos la tabla. Entonces, voy a sumar los cuatro renderizados. Veamos cuánto tiempo lleva. 20, 20, 20 y 20, ¿verdad? La tabla se renderizó dos veces, x20ms cada una, oh lo siento, cuatro veces, igual a 80ms. Ese es un componente costoso. Y entonces, simplemente sigo pasando por los renderizados de esta manera y sigo encontrando los componentes que se renderizan muchas veces, como componentes baratos renderizados muchas veces o por ejemplo aquí ves el contenedor posicionado. Como, este es el renderizado número seis. Tenemos un montón de instancias de contenedores posicionados, una, dos, tres, cuatro, cinco, seis. Y cada una de estas instancias también parece haberse renderizado cuatro veces, parece ser. Entonces, si hago clic en esta instancia, sí, puedo ver cuatro renderizados. Si hago clic en esta instancia, también puedo ver cuatro renderizados, etcétera, etcétera. Entonces, de nuevo, esto también podría ser significativo. Contenedor posicionado. Entonces, hay cinco instancias, cinco instancias separadas. Cada una de estas instancias parece haberse renderizado cuatro veces. Como, si hago clic en cualquiera de ellas, veo cuatro renderizados. Vale. Las duraciones parecen ser diferentes, ¿verdad? Como, esto toma dos milisegundos en cada renderizado, pero esto toma 20 milisegundos en cada, oh no, no en cada renderizado. Entonces, esto es un poco más difícil de, esto necesitaría un poco más de tiempo para calcular, pero como, no sé. Si estimo, como, ¿qué podría ser? Bueno, no voy a pasar por todos ellos ahora mismo. Normalmente iría, pero digamos que de cero a 20MS igual a 5.2020. Entonces, de cero a, ¿qué podría ser en total? Como 60MS, dado la diferencia en cosas. Entonces, más o menos, ¿verdad? No necesitamos ser precisos. Y entonces, simplemente paso por la grabación de esta manera y recojo todos los componentes que se están renderizando. Y una vez que termino con esto, simplemente miro los componentes más costosos aquí, que hasta ahora tengo el editor de widgets y la tabla, y empiezan a tratar de averiguar cómo resolver esto, cómo evitar que esto se renderice.
Entonces, lo que hemos pasado en la última hora fue la demostración, básicamente, del proceso de cómo abordo cómo podrías abordar debugging problemas reales complejos en aplicaciones reales, tomando la aplicación, perfilándola en Chrome Dev Tools, averiguando las partes más costosas y a qué atribuyen a React Rendering, React Effects, otros JS. Luego, si es React Rendering, yendo al React Profiler y encontrando los componentes más costosos. Y luego, una vez que conoces los componentes más costosos, mirando estos componentes en particular e intentando averiguar por qué exactamente se están renderizando y cómo podríamos hacerlos más baratos o cómo podríamos renderizarlos menos a menudo o renderizar menos de ellos o no renderizarlos en absoluto o tal vez hacerlos más baratos. Entonces, en este caso, voy a echar un vistazo... Echemos un vistazo al componente Widgets Editor, que tardó 84 milisegundos en renderizarse. Entonces, voy a ir a Chrome y también saldré de la vista de pantalla completa aquí. Voy a Chrome y voy a llegar a los componentes del editor de widgets y ver por qué se renderizó. Entonces, si hago clic en este componente, si cambio entre los renderizados, veo que la primera vez que el editor de widgets se renderizó fue porque su hook 5 y 47 cambiaron. La segunda vez que se renderizó fue porque su hook número cinco cambió. Y entonces, en este punto, lo que podría hacer o lo que podría hacer es ir a la code base y mirar este widget e intentar encontrar estos hooks, hooks número cinco y hook número 47 que era el componente del editor de widgets. Pero si miro los hooks que tiene este componente, me daría cuenta de que este componente no tiene 47 hooks. Este componente tiene hook, uno, dos, tres, cuatro, cinco, seis, siete, ocho, nueve, 10, 11, 12, 13 y entonces sí, número de hooks. Entonces, el componente tiene 13 hooks. Mientras que DevTools me dice que el hook número cinco y el hook número 47 han cambiado. ¿Alguien sabe por qué está pasando esto? ¿Por qué DevTools me habla del hook número 47? ¿Qué es el hook número 47? Sí, como dice Frederick en el chat, los hooks pueden tener hooks. Y de hecho, como Rack Profiler, Rack Profiler no tiene idea sobre los hooks personalizados que utilizas. Rack Profiler solo tiene visibilidad en los hooks propios de Rack. Entonces, por ejemplo, si tienes algún hook que dice que const, lo sé.
Comments