Gutenberg: Los bloques de la galería son lentos

Creado en 15 dic. 2017  ·  3Comentarios  ·  Fuente: WordPress/gutenberg

Resumen del problema

El bloque de la Galería, tal como está implementado actualmente, tiene problemas de rendimiento y escala debido a la cantidad de solicitudes que genera. No estoy familiarizado con las mejores prácticas en React, pero intentaré explicar lo que veo cuando trabajo con galerías.

Pasos para reproducir (para errores)

  1. Insertar un nuevo bloque de Galería

  2. Haga clic en el botón "Insertar desde la biblioteca de medios" para abrir el modal de medios.

    Este es un comportamiento estándar, pero solo para explicar lo que sucede: cuando el modal de medios se abre por primera vez, envía una solicitud query-attachments AJAX para recuperar los 40 archivos adjuntos más recientes y los agrega a una colección global accesible en wp.media.model.Attachments.all .Al desplazarse por la biblioteca, se cargarán 40 archivos adjuntos a la vez.

  3. Selecciona 10 imágenes y haz clic en el botón "Crear nueva galería".

  4. Haz clic en el botón "Insertar galería".

    __Cuando se inserta la galería, el bloque Galería dispara una solicitud separada a la API REST para cada imagen en la galería. En este caso, son 10 solicitudes que deben responder antes de que se pueda obtener una vista previa de la galería.

    Además de golpear el servidor con solicitudes, esto también crea un retraso de renderizado subóptimo .__

  5. Haga clic en el botón editar en la barra de herramientas para actualizar la galería.

    __ El bloque envía una solicitud get-attachment AJAX para cada imagen en la galería. Esto sucede cada vez que se abre el marco de medios .__

  6. Cerrar el marco de medios

  7. Guardar la publicación

  8. Actualizar

    __Cuando se carga el editor, las imágenes se obtienen individualmente de la API REST .__

Comportamiento esperado


Esperaba que las galerías se renderizaran más rápidamente. En mi máquina local, una galería con 10 imágenes puede tardar entre 4 y 10 segundos en renderizarse.

Solución posible


Idealmente, si una publicación tiene una galería, los datos de la imagen se precargarían para evitar solicitudes adicionales durante la carga inicial.

Al abrir el marco de medios, PR # 2488 ayudaría a minimizar las solicitudes.

Al insertar una galería desde el marco de medios, todos los datos necesarios para renderizar la galería deben estar disponibles en la colección wp.media.model.Attachments.all . Sería bueno usar datos que ya están en la memoria en lugar de generar una nueva solicitud para cada imagen. La otra opción sería buscar datos para todas las imágenes en una sola solicitud.

Intenté deshabilitar withAPIData para el componente GalleryImage y todo parecía seguir funcionando correctamente, pero no lo probé a fondo. Si eso fuera eliminado, las galerías se renderizarían casi instantáneamente.

Problemas relacionados y / o RP

PR # 2488 coloca el marco de medios en el estado correcto al editar una galería, pero también evita que se genere una solicitud AJAX separada para cada imagen al abrir el modal.

[Block] Gallery [Feature] Media [Status] Blocked [Type] Bug [Type] Performance

Todos 3 comentarios

La necesidad original de solicitudes por imagen se introdujo en # 2874 como parte del pegado de códigos cortos de galería (cc @iseulde). Parece que en la mayoría de los casos no necesitamos las solicitudes de API en absoluto, por lo que idealmente podrían omitirse. Para admitir códigos abreviados de galería, me pregunto si sería mejor si la transformación en sí pudiera devolver una promesa para resolver los atributos del bloque, tiempo durante el cual podría transformar los ID a la forma de atributo esperada.

Probé agregar un bloque de galería con 10 imágenes y luego actualizar la página del editor usando WordPress 4.9.8 y Gutenberg 4.1.1 a través de una conexión de 72Mbps y descubrí que actualizar la página de la galería tomó ~ 6.2s (prueba completa: 1m3s ).

Creo que con los cambios recientes en la forma en que obtenemos imágenes, esto ahora funciona como se esperaba. Verifiqué en 4.3 que el tiempo de carga ha mejorado a partir de este problema informado y que las imágenes no se cargan de la forma en que veíamos en el pasado. Me estoy moviendo del hito de 5.0 RC ya que esto no es un bloqueador para RC.

El RP sugerido originalmente se fusionó hace algún tiempo.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

moorscode picture moorscode  ·  3Comentarios

mhenrylucero picture mhenrylucero  ·  3Comentarios

youknowriad picture youknowriad  ·  3Comentarios

nylen picture nylen  ·  3Comentarios

pfefferle picture pfefferle  ·  3Comentarios