Quando devo creare più visualizzazioni di una vista anziché più viste?


8

È semplicemente una questione di convenienza creare più display di una vista anziché più viste o c'è un vantaggio in termini di prestazioni?

La presenza di uno dei seguenti elementi in alcuni display ma non in altri influisce sulla vista nel suo insieme?

  • filtri contestuali
  • filtri del tipo di contenuto
  • aggregazione

Ad esempio, sono curioso di sapere se avere un display mostra solo i risultati del tipo di contenuto dell'articolo, un altro che mostra i risultati del forum, un altro che mostra un tipo di contenuto fotografico personalizzato che rallenta ogni display. O se le viste condividono tutte lo stesso tipo di contenuto, ma differiscono solo per il fatto che uno ha un filtro contestuale per nid e gli altri no, rallentano tutti?

Se ho 30 display per una singola vista, dovrei rifattorizzarlo per ottenere un vantaggio in termini di prestazioni o semplicemente perché l'interfaccia utente non è stata pensata per mostrare quel numero di display.

Risposte:


8

Per quanto riguarda il codice, sia le viste che i display sono rappresentati da oggetti. Quando una vista viene elaborata, carica in memoria tutte le visualizzazioni secondarie, indipendentemente dal fatto che si stia visualizzando una sola visualizzazione nella pagina visualizzata. Mentre le query del database vengono eseguite solo per il display attivo, le proprietà dei display inattivi vengono comunque caricate in memoria.

Ciò significa che se si hanno 50 schermi in una Vista, 50 schermi verranno caricati in memoria, indipendentemente dal fatto che si stia visualizzando solo uno di essi. Quindi la risposta alla tua domanda è sì, in genere più visualizzazioni in una vista hai, più la vista diventa inefficiente dal punto di vista della memoria.

Detto questo, personalmente penso che avere tra 2-10 display in una vista dovrebbe rivelarsi trascurabile dal punto di vista della memoria. Avere una discreta quantità di display in una Vista serve ai suoi scopi pratici, dopotutto (altrimenti, perché dovrebbero essere lì in primo luogo?).

Per quanto riguarda la seconda domanda (impatto sulle prestazioni di filtri aggiuntivi, ecc.) Sì, l'aggiunta di determinati parametri alla vista influirà sulle prestazioni. Se vuoi sapere esattamente quanto, puoi andare su admin / struttura / viste / impostazioni (se sei in D7) e selezionare Mostra informazioni e statistiche sulla vista durante l'anteprima dal vivo , Mostra la query SQL e Mostra le statistiche delle prestazioni . Ecco uno screenshot della schermata delle prestazioni:

Visualizza le impostazioni delle prestazioni

Se sei ulteriormente interessato al comportamento delle query (quante righe vengono analizzate, quali chiavi vengono utilizzate), puoi copiare la query dall'interfaccia Views (dopo aver selezionato "Mostra query SQL") e analizzare la query usando il explaincomando MySQL . Ci sono molti articoli come questo da explainutilizzare su Google.


1
Una domanda di follow-up: quando dici che i display secondari sono caricati in memoria, vengono caricati i set di risultati di tutti i display o solo le stringhe di query stesse?
PetroleumJelliffe,

1
@PetroleumJelliffe Un'istanza di classe che rappresenta ogni display è collegata a un'istanza di classe View. I risultati del database vengono recuperati solo per la visualizzazione "attiva" corrente, quindi nessuna delle altre istanze di visualizzazione collegate contiene risultati del database o stringhe di query, per quella materia. Per quanto ne so, le stringhe di query nei display Views sono costruite solo per il display attivo in esecuzione.
barista dilettante
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.