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.
Insira um novo bloco da Galeria
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.
Selecione 10 imagens e clique no botão "Criar nova galeria"
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 .__
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 .__
Feche o quadro de mídia
Salve a postagem
Atualizar
__Quando o editor carrega, as imagens são buscadas individualmente na API REST .__
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.
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.
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.
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.