Wann sollte ich mehrere Anzeigen einer Ansicht anstelle mehrerer Ansichten erstellen?

8

Ist es einfach eine Frage der Bequemlichkeit, mehrere Anzeigen einer Ansicht anstelle mehrerer Ansichten zu erstellen, oder gibt es einen Leistungsvorteil?

Hat das Vorhandensein eines der folgenden Elemente in einigen Anzeigen, jedoch nicht in anderen, Auswirkungen auf die Gesamtansicht?

  • Kontextfilter
  • Filter für Inhaltstypen
  • Anhäufung

Ich bin zum Beispiel neugierig, ob bei einer Anzeige nur Ergebnisse des Artikelinhaltstyps angezeigt werden, bei einer anderen Anzeige die Ergebnisse des Forums und bei einer anderen Anzeige ein benutzerdefinierter Fotoinhaltstyp die Anzeige langsamer wird. Oder wenn die Ansichten alle denselben Inhaltstyp haben, sich jedoch nur darin unterscheiden, dass einer einen Kontextfilter für nid hat und die anderen nicht, werden sie alle langsamer?

Wenn ich 30 Anzeigen für eine einzelne Ansicht habe, sollte ich sie aus Leistungsgründen umgestalten oder nur, weil die Benutzeroberfläche nicht so viele Anzeigen anzeigen sollte.

PetroleumJelliffe
quelle

Antworten:

8

In Bezug auf den Code werden sowohl Ansichten als auch Anzeigen durch Objekte dargestellt. Wenn eine Ansicht verarbeitet wird, werden alle untergeordneten Anzeigen in den Speicher geladen, unabhängig davon, ob Sie nur eine Ansicht auf der angezeigten Seite rendern. Während Datenbankabfragen nur für die aktive Anzeige ausgeführt werden, werden die Eigenschaften der inaktiven Anzeigen weiterhin in den Speicher geladen.

Dies bedeutet, dass bei 50 Anzeigen in einer Ansicht 50 Anzeigen in den Speicher geladen werden, unabhängig davon, ob Sie nur eine davon anzeigen. Die Antwort auf Ihre Frage lautet also "Ja". Je mehr Anzeigen in einer Ansicht angezeigt werden, desto ineffizienter wird die Ansicht in Bezug auf den Speicher.

Vor diesem Hintergrund denke ich persönlich, dass sich zwischen 2 und 10 Anzeigen in einer Ansicht in Bezug auf den Speicher als vernachlässigbar erweisen sollten. Eine diskrete Anzahl von Anzeigen in einer Ansicht zu haben, dient schließlich ihren praktischen Zwecken (andernfalls, warum sollten sie überhaupt dort sein?).

Bei Ihrer zweiten Frage (Auswirkungen zusätzlicher Filter auf die Leistung usw.) wirkt sich das Hinzufügen bestimmter Parameter zu Ihrer Ansicht auf die Leistung aus. Wenn Sie genau wissen möchten, um wie viel, können Sie unter admin / structure / views / settings (wenn Sie sich in D7 befinden) Informationen und Statistiken zur Ansicht während der Live-Vorschau anzeigen , SQL-Abfrage anzeigen und Leistungsstatistiken anzeigen auswählen . Hier ist ein Screenshot des Performance-Bildschirms:

Zeigt die Leistungseinstellungen an

Wenn Sie weiter am Verhalten der Abfragen interessiert sind (wie viele Zeilen analysiert werden, welche Schlüssel verwendet werden), können Sie die Abfrage von der Ansichtsoberfläche kopieren (sobald Sie "SQL-Abfrage anzeigen" ausgewählt haben) und die Abfrage analysieren mit dem MySQL- explainBefehl. Es gibt viele Artikel wie diesen zur explainVerwendung bei Google.

Amateur Barista
quelle
1
Eine Folgefrage: Wenn Sie sagen, dass die untergeordneten Anzeigen in den Speicher geladen werden, werden die Ergebnismengen aller Anzeigen geladen oder nur die Abfragezeichenfolgen selbst?
PetroleumJelliffe
1
@PetroleumJelliffe Eine Klasseninstanz, die jede Anzeige darstellt, wird an eine View-Klasseninstanz angehängt. Datenbankergebnisse werden nur für die aktuelle "aktive" Anzeige abgerufen, sodass keine der anderen angehängten Anzeigeinstanzen Datenbankergebnisse oder Abfragezeichenfolgen enthält. Soweit mir bekannt ist, werden Abfragezeichenfolgen in Ansichten nur für die aktive Anzeige erstellt, die ausgeführt wird.
Amateur Barista