Quando devo criar várias exibições de uma exibição em vez de várias exibições?

8

É simplesmente uma questão de conveniência criar várias exibições de uma exibição em vez de várias exibições ou há um benefício no desempenho?

A presença de alguns dos itens a seguir em alguns monitores, mas não em outros, afeta a exibição como um todo?

  • filtros contextuais
  • filtros de tipo de conteúdo
  • agregação

Por exemplo, estou curioso para saber se uma exibição mostra apenas os resultados do tipo de conteúdo do artigo, outra mostra os resultados do fórum, outra mostra o tipo de conteúdo de foto personalizado, tornando cada exibição mais lenta. Ou se os modos de exibição compartilham o mesmo tipo de conteúdo, mas diferem apenas pelo fato de um ter um filtro contextual para nid e os outros não, todos eles diminuem a velocidade?

Se eu tiver 30 monitores para uma única exibição, devo refatorá-lo para obter benefícios de desempenho ou apenas porque a interface do usuário não foi projetada para mostrar tantos monitores.

PetroleumJelliffe
fonte

Respostas:

8

Em termos de código, as exibições e as exibições são representadas por objetos. Quando uma Visualização está sendo processada, ela carrega todas as telas filho na memória, independentemente de você estar renderizando apenas uma Visualização na página que está visualizando. Enquanto as consultas ao banco de dados são executadas apenas para a exibição ativa, as propriedades das exibições inativas ainda são carregadas na memória.

Isso significa que, se você tiver 50 monitores em uma única exibição, 50 monitores serão carregados na memória, independentemente de você estar exibindo apenas um deles. Portanto, a resposta para sua pergunta é sim. Normalmente, quanto mais exibições em uma exibição você tiver, mais ineficiente a exibição se torna em memória.

Com isso dito, eu pessoalmente acho que ter entre 2 e 10 telas em um View deve ser insignificante em termos de memória. Ter uma quantidade discreta de exibições em um View serve a seus propósitos práticos, afinal (caso contrário, por que eles estariam lá em primeiro lugar?).

Quanto à sua segunda pergunta (impacto no desempenho de filtros adicionais, etc.), sim, adicionar certos parâmetros à sua Visualização afetará o desempenho. Se você quiser saber exatamente quanto, poderá acessar admin / structure / views / settings (se estiver no D7) e selecionar Mostrar informações e estatísticas sobre a exibição durante a visualização ao vivo , Mostrar a consulta SQL e Mostrar estatísticas de desempenho . Aqui está uma captura de tela da tela de desempenho:

Visualiza configurações de desempenho

Se você ainda estiver interessado no comportamento das consultas (quantas linhas são analisadas, quais chaves são usadas), poderá copiar a consulta na interface Views (depois de selecionar "Mostrar consulta SQL") e analisar a consulta usando o explaincomando MySQL . Existem muitos artigos como este para explainuso no Google.

barista amador
fonte
11
Uma pergunta de acompanhamento: quando você diz que as telas filho são carregadas na memória, os conjuntos de resultados de todas as telas são carregados ou apenas as próprias strings de consulta?
PetroleumJelliffe
11
@PetroleumJelliffe Uma instância de classe representando cada exibição é anexada a uma instância da classe View. Os resultados do banco de dados são buscados apenas para a exibição "ativa" atual; portanto, nenhuma das outras instâncias de exibição anexadas mantém os resultados do banco de dados ou as cadeias de consulta. Até onde eu sei, as cadeias de consulta nas exibições Views são construídas apenas para a exibição ativa que está sendo executada.
barista amador