JSPaste / Frontend

JSPaste Frontend
https://jspaste.eu
European Union Public License 1.2
4 stars 2 forks source link

Optimización #11

Open inetol opened 4 months ago

inetol commented 4 months ago

El frontend (para producción) ahora mismo genera una carga demasiado alta para el procesador cuando un usuario accede al sitio, Next.js no parece estar optimizando correctamente, generando caché o renderizando el sitio de forma óptima.

Se tendrá que leer "el librito" para mitigar este problema cuanto antes mejor.

tnfAngel commented 4 months ago

Quizás sea por el editor Monaco, ya que es bastante completo y necesita cargar varias cosas, por lo que veo no hay re-renders innecesarios, ni siquiera cuando se escribe en el editor (ya que no usa React), lo único que noto es que hay bastante peso en la carga inicial de JS imagen

tnfAngel commented 4 months ago

Monaco es bastante grande imagen

tnfAngel commented 4 months ago

En cuanto a carga de CPU, si es verdad que hay varios scripts demasiado lentos, voy a ver qué se puede hacer imagen

inetol commented 4 months ago

~Monaco en sí se carga todo de golpe, he añadido un parche para que cargue algunas partes del documento en paralelo y el tiempo de carga inicial se ha reducido un poco~

Haciendo que el servidor renderice el Editor (desconozco el impacto en el rendimiento con múltiples conexiones) he conseguido bajar el peso de la página al abrirla, sería beneficioso en móviles y cosas que no tengan demasiada potencia (?)

Screenshot

tnfAngel commented 4 months ago

Debería, además todo está fuertemente cacheado por CF, así que el servidor no debería recibir mucha carga

inetol commented 4 months ago

El commit 896d325 incluye algunas mejoras de optimización para remediar más o menos este problema

tnfAngel commented 4 months ago

He activado optimizaciones en el lado de CF, debería ser mejor ahora Por cierto, la sección de controles a veces no aparece cuando se activa la carga dinámica, voy a revertir el cambio para ese componente imagen

tnfAngel commented 4 months ago

imagen sin embargo los tiempos siguen siendo bastante malos

inetol commented 4 months ago

He activado optimizaciones en el lado de CF, debería ser mejor ahora Por cierto, la sección de controles a veces no aparece cuando se activa la carga dinámica, voy a revertir el cambio para ese componente imagen

Ya deberia estar arreglado

inetol commented 4 months ago

imagen sin embargo los tiempos siguen siendo bastante malos

Si tio, no sé qué más hacerle para reducir la carga al cliente. Ya se me ocurrirá algo

tnfAngel commented 4 months ago

Dw, se puede aparcar porque el problema no es tan grande y solo afectará notablemente a los dispositivos de bajo rendimiento

inetol commented 4 months ago

Dw, se puede aparcar porque el problema no es tan grande y solo afectará notablemente a los dispositivos de bajo rendimiento

El Rocket Loader de CF da más problemas que otra cosa, apuesto a que por el simple hecho de existir la carga de scripts va más lenta

tnfAngel commented 4 months ago

Lo voy a quitar

jc-discdev commented 4 months ago

Podriamos probar con lo de cloudflare que analiza que es lo que hace que cargue lento

inetol commented 4 months ago

Con el último commit de la rama dev veo que el problema que tiene el sitio es que tiene saturado el hilo principal porque más de un 90% es puro JS que se ejecuta a la vez. Se podría usar preload con algunos recursos o retrasar la carga por ejemplo del componente de ajustes hasta que abrieses el menú, como casi todo lo maneja NextJS no sé todavía como hacerlo adecuadamente.

Screenshot

inetol commented 4 months ago

Probando de quitar la carga dinámica se recorta casi a la mitad la cantidad de peticiones que se hace al servidor y eso se puso por si le colaba al cliente de cargar recursos cuando lo necesitase, así que de momento se va a fuera

Screenshot

jc-discdev commented 4 months ago

El rocket loader de cloudflare o algun servicio de caching de la misma no ayudaría?

tnfAngel commented 4 months ago

Genial, yo activé esta opción https://nextjs.org/docs/app/building-your-application/optimizing/scripts#offloading-scripts-to-a-web-worker-experimental

tnfAngel commented 4 months ago

Ah, pero no funciona en app directory aún

inetol commented 4 months ago

El rocket loader de cloudflare o algun servicio de caching de la misma no ayudaría?

Prácticamente nada, además es propenso a romper la página

inetol commented 4 months ago

@tnfAngel Sería posible mover todos los Modals para que carguen dinámicamente? Ahora mismo todo eso se incluye en la carga inicial de la página y se podría evitar bastante overhead.

Intente hacerlo en #57 pero como no funcionaba correctamente lo deshice

tnfAngel commented 4 months ago

@tnfAngel Sería posible mover todos los Modals para que carguen dinámicamente? Ahora mismo todo eso se incluye en la carga inicial de la página y se podría evitar bastante overhead.

Intente hacerlo en #57 pero como no funcionaba correctamente lo deshice

Vale, voy a mirar

tnfAngel commented 4 months ago

según lo que leo, los modals son "lazy" por defecto https://github.com/chakra-ui/chakra-ui/discussions/5569, y no se renderizan ni se agregan al HTML hasta que los abres, lo unico que sería adecuado es "separarlos" del chunk principal

inetol commented 4 months ago

según lo que leo, los modals son "lazy" por defecto chakra-ui/chakra-ui#5569, y no se renderizan ni se agregan al HTML hasta que los abres, lo unico que sería adecuado es "separarlos" del chunk principal

Mierda es verdad, y separarlos en otro chunk no debería de arreglarlo, como mucho se podrían liberar 10kB, si lo comparas con Monaco son bastante insignificantes

Screenshot

tnfAngel commented 4 months ago

según lo que leo, los modals son "lazy" por defecto chakra-ui/chakra-ui#5569, y no se renderizan ni se agregan al HTML hasta que los abres, lo unico que sería adecuado es "separarlos" del chunk principal

Mierda es verdad, y separarlos en otro chunk no debería de arreglarlo, como mucho se podrían liberar 10kB, si lo comparas con Monaco son bastante insignificantes

Screenshot

ya, tienes razón