Когда мне следует создавать несколько дисплеев вида вместо нескольких видов?

8

Это просто вопрос удобства создания нескольких дисплеев представления вместо нескольких представлений, или есть выигрыш в производительности?

Влияет ли какой-либо из следующих элементов на некоторые дисплеи, но не на другие, влияет на представление в целом?

  • контекстные фильтры
  • фильтры типа контента
  • агрегирование

Например, мне любопытно, заставляет ли дисплей показывать только результаты типа контента Статьи, другой - результаты Форума, другой - пользовательский тип контента Фото, замедляет ли каждый дисплей. Или, если все представления имеют один и тот же тип контента, но отличаются только тем, что один имеет контекстный фильтр для nid, а другие нет, все они замедляются?

Если у меня есть 30 дисплеев для одного представления, я должен реорганизовать его для повышения производительности или просто потому, что пользовательский интерфейс не предназначен для отображения такого количества дисплеев.

PetroleumJelliffe
источник

Ответы:

8

С точки зрения кода, и представления, и отображения представлены объектами. Когда представление обрабатывается, оно загружает все его дочерние отображения в память, независимо от того, отображаете ли вы только один просмотр на странице, которую вы просматриваете. Хотя запросы к базе данных выполняются только для активного дисплея, свойства неактивных дисплеев все еще загружаются в память.

Это означает, что если у вас есть 50 дисплеев в одном просмотре, 50 дисплеев будут загружены в память, независимо от того, отображается ли только один из них. Таким образом, ответ на ваш вопрос - да, обычно чем больше отображений в вашем представлении, тем более неэффективным оно становится с точки зрения памяти.

Учитывая это, я лично считаю, что наличие от 2 до 10 дисплеев в представлении должно быть незначительным с точки зрения памяти. В конце концов, наличие небольшого количества дисплеев в представлении служит его практическим целям (в противном случае, зачем им вообще быть там?).

Что касается вашего второго вопроса (влияние дополнительных фильтров на производительность и т. Д.), То добавление определенных параметров в представление будет влиять на производительность. Если вы хотите точно узнать, сколько, вы можете перейти к admin / structure / views / settings (если вы находитесь в D7) и выбрать Показать информацию и статистику о представлении во время предварительного просмотра , Показать запрос SQL и Показать статистику производительности. , Вот скриншот экрана производительности:

Просмотр настроек производительности

Если вас больше интересует поведение запросов (сколько строк анализируется, какие ключи используются), вы можете скопировать запрос из интерфейса Views (когда вы выбрали «Показать запрос SQL») и проанализировать запрос. используя команду MySQL explain. Есть много статей, подобных этой, для explainиспользования в Google.

любитель бариста
источник
1
Один дополнительный вопрос: когда вы говорите, что дочерние дисплеи загружаются в память, загружаются ли наборы результатов всех дисплеев или только строки запроса?
PetroleumJelliffe
1
@PetroleumJelliffe Экземпляр класса, представляющий каждое отображение, присоединен к экземпляру класса View. Результаты базы данных выбираются только для текущего «активного» дисплея, поэтому ни один из других прикрепленных экземпляров дисплея не содержит результатов базы данных или строк запроса. Насколько я знаю, строки запросов в представлениях Views создаются только для выполняемого активного отображения.
любительская бариста