Nuevo panel de menú móvil funciona lento y con lag en dispositivos antiguos

Hola :waving_hand:

Desde la actualización de UX: improve touch, swipe, panning performance on mobile menus by featheredtoast · Pull Request #23775 · discourse/discourse · GitHub, el panel del menú (usuario y barra lateral) se mueve mucho más lento que antes en dispositivos móviles Android antiguos. Quizás sea porque el rendimiento de la CPU de estos dispositivos no es suficiente para que se mueva con fluidez.

En mi dispositivo Huawei P20 Pro.

Sin embargo, también lo probé en un iPhone X, que es súper fluido y rápido, así que creo que la CPU será el problema. ¿Hay alguna posibilidad de mejorar el rendimiento en dispositivos más antiguos?

Gracias :slightly_smiling_face:

6 Me gusta

¡Gracias @Don, echaremos un vistazo!

2 Me gusta

¡Hola Don, gracias por tus comentarios!

Pronto lo probaré; sospecho que los dispositivos más antiguos aún podrían necesitar la optimización de rendimiento (un poco rudimentaria) que reduce el número de elementos en el menú a 20 para que funcione sin problemas. Lo investigaré en breve.

3 Me gusta

@Don - solo estoy investigando más para saber qué probar, ¿estás notando esto al abrir/cerrar menús con un toque (dentro y fuera del menú), o al deslizar (manteniendo y haciendo un gesto de deslizamiento)?

2 Me gusta

El menú parece fluido cuando lo abro por primera vez. Creo que es porque los elementos del panel no se han cargado. Cuando lo abro por primera vez, aparece el indicador de carga giratorio en la parte superior. Creo que este es un buen comportamiento y tal vez sería genial usar siempre el indicador de carga giratorio al abrir. :thinking:

Las aperturas después de esto son sin animaciones. El cierre es aleatorio (a veces fluido, a veces con retrasos).

Cuando se abría y hacía clic fuera, normalmente los botones del menú del panel se retrasaban. Pero esos se deslizan primero :thinking: ¿Quizás esto sucede porque todo el panel del menú está en reverse-row y cuando se cierra, la clase se elimina antes de que se deslice por completo y vuelva a row?

Editar: Esos no son los botones del menú (pestaña), son solo los iconos antes de las notificaciones. Pero normalmente aparece un retraso en esa línea.

Cuando uso un gesto para cerrar el menú, parece fluido.

2 Me gusta

Actualización: Parece que en el navegador Firefox el movimiento del menú es fluido. También lo probé en Edge, donde es igual que en Chrome.

Firefox

Por lo que puedo ver, la “lentitud” aquí se debe a que las cabeceras se vuelven a renderizar, no a las animaciones en sí.

Una cosa que introduje y que puede dar la percepción de lentitud es la animación de deslizamiento (esta animación se eliminó inadvertidamente cuando refactorizamos nuestra nueva cabecera).

Dar un poco de margen con setTimeout entre la animación y el trabajo de renderizado que hacen los menús de los widgets parece hacer que las cosas vayan mucho más fluidas, por lo que no es la animación en sí lo que es lento, así que sospecho que es el trabajo que ocurre alrededor del renderizado de las cabeceras del sitio al abrir/cerrar.

De hecho, me pregunto si el manejo de la promesa de fin de animación de Firefox se dispara después de que la animación se ha pintado por completo (asumí que este era el caso al codificar el cambio original), lo que podría explicar por qué se ve más fluido que Chrome, mientras que Chrome permite que el trabajo de recálculo comience después de que se completan los cálculos de la animación, pero antes de que se pinte el fin de la animación.


EDIT: Estoy añadiendo una pausa usando nuestro runloop para añadir el espacio necesario antes de animar, esto debería hacer que la animación se sienta mucho más fluida: UX: call discourseLater on menu animations by featheredtoast · Pull Request #24168 · discourse/discourse · GitHub

3 Me gusta

¡Muchísimas gracias! ¡Buena observación! :heart_eyes:

2 Me gusta