Gutenberg: Os blocos da galeria são lentos

Criado em 15 dez. 2017  ·  3Comentários  ·  Fonte: WordPress/gutenberg

Visão geral do problema

O bloco Gallery, conforme está implementado atualmente, tem problemas de desempenho e escala devido ao número de solicitações que gera. Não estou familiarizado com as práticas recomendadas no React, mas tentarei explicar o que estou vendo ao trabalhar com galerias.

Etapas para reproduzir (para bugs)

  1. Insira um novo bloco da Galeria

  2. Clique no botão "Inserir da biblioteca de mídia" para abrir o modal de mídia

    Este é o comportamento padrão, mas apenas para explicar o que acontece: quando o modal de mídia é aberto pela primeira vez, ele envia uma solicitação query-attachments AJAX para buscar os 40 anexos mais recentes e os adiciona a uma coleção global acessível em wp.media.model.Attachments.all .Rolar pela biblioteca irá carregar lentamente 40 anexos por vez.

  3. Selecione 10 imagens e clique no botão "Criar nova galeria"

  4. Clique no botão "Inserir Galeria"

    __Ao inserir a galeria, o bloco Gallery dispara uma solicitação separada para a API REST para cada imagem na galeria. Nesse caso, são 10 solicitações que precisam ser respondidas antes que a galeria possa ser visualizada.

    Além de sobrecarregar o servidor com solicitações, isso também cria um atraso de renderização abaixo do ideal .__

  5. Clique no botão editar na barra de ferramentas para atualizar a galeria

    __O bloco envia uma solicitação get-attachment AJAX para cada imagem da galeria. Isso acontece sempre que o quadro de mídia é aberto .__

  6. Feche o quadro de mídia

  7. Salve a postagem

  8. Atualizar

    __Quando o editor carrega, as imagens são buscadas individualmente na API REST .__

Comportamento esperado


Eu esperava que as galerias fossem renderizadas mais rapidamente. Na minha máquina local, uma galeria com 10 imagens pode levar de 4 a 10 segundos para ser renderizada.

Solução possível


O ideal é que, se uma postagem tiver uma galeria, os dados da imagem serão pré-carregados para evitar solicitações extras durante o carregamento inicial.

Ao abrir o quadro de mídia, PR # 2488 ajudaria a minimizar as solicitações.

Ao inserir uma galeria do frame de mídia, todos os dados necessários para renderizar a galeria devem estar disponíveis na coleção wp.media.model.Attachments.all . Seria bom usar dados que já estão na memória em vez de gerar uma nova solicitação para cada imagem. A outra opção seria buscar dados para todas as imagens em uma única solicitação.

Eu tentei desabilitar withAPIData para o componente GalleryImage e tudo parecia continuar funcionando corretamente, mas eu não testei completamente. Se isso fosse removido, as galerias seriam renderizadas quase que instantaneamente.

Problemas Relacionados e / ou PRs

PR # 2488 coloca o quadro de mídia no estado correto ao editar uma galeria, mas também evita que uma solicitação AJAX separada seja gerada para cada imagem ao abrir o modal.

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

Todos 3 comentários

A necessidade original de solicitações por imagem foi introduzida em # 2874 como parte da colagem de shortcode da galeria (cc @iseulde). Na maioria dos casos, parece que não precisamos das solicitações de API, de modo que o ideal é que elas possam ser ignoradas. Para oferecer suporte aos shortcodes da galeria, eu me pergunto se seria melhor se a própria transformação pudesse retornar uma promessa de resolver para os atributos do bloco, durante o qual ela poderia transformar os IDs na forma de atributo esperada.

Eu testei adicionar um bloco de galeria com 10 imagens e, em seguida, atualizar a página do editor usando WordPress 4.9.8 e Gutenberg 4.1.1 por meio de uma conexão de 72 Mbps e descobri que atualizar a página da galeria demorou ~ 6.2s (teste completo: 1m3s ).

Acredito que, com as mudanças recentes na forma como buscamos imagens, isso agora está funcionando conforme o esperado. Eu verifiquei no 4.3 que o tempo de carregamento melhorou com esse problema relatado e que as imagens não estão carregando da maneira que estávamos vendo no passado. Estou passando do marco 5.0 RC, pois este não é um bloqueador para o RC.

O PR originalmente sugerido foi fundido há algum tempo.

Esta página foi útil?
0 / 5 - 0 avaliações