Quand dois-je créer plusieurs affichages d'une vue au lieu de plusieurs vues?

8

Est-ce simplement une question de commodité de créer plusieurs affichages d'une vue au lieu de plusieurs vues, ou y a-t-il un avantage en termes de performances?

La présence de l'un des éléments suivants dans certains affichages mais pas dans d'autres affecte-t-elle la vue dans son ensemble?

  • filtres contextuels
  • filtres de type de contenu
  • agrégation

Par exemple, je suis curieux de savoir si un affichage affiche uniquement les résultats du type de contenu de l'article, un autre affichant les résultats du forum, un autre affichant un type de contenu photo personnalisé rend chaque affichage plus lent. Ou si les vues partagent toutes le même type de contenu, mais ne diffèrent que par le fait que l'un a un filtre contextuel pour nid, et les autres non, ralentissent-ils tous?

Si j'ai 30 écrans pour une seule vue, dois-je le refactoriser pour améliorer les performances, ou simplement parce que l'interface utilisateur n'était pas censée montrer autant d'affichages.

PétroleJelliffe
la source

Réponses:

8

Côté code, les vues et les affichages sont représentés par des objets. Lorsqu'une vue est en cours de traitement, elle charge tous ses affichages enfants en mémoire, que vous ne rendiez qu'une seule vue dans la page que vous consultez. Alors que les requêtes de base de données sont exécutées uniquement pour l'affichage actif, les propriétés des affichages inactifs sont toujours chargées en mémoire.

Cela signifie que si vous avez 50 écrans dans une vue, 50 écrans seront chargés en mémoire, que vous n'en affichiez qu'un seul. Donc, la réponse à votre question est oui, généralement plus il y a d'affichages dans une vue, plus la vue devient inefficace en termes de mémoire.

Cela étant dit, je pense personnellement qu'avoir entre 2 et 10 écrans dans une vue devrait s'avérer négligeable en termes de mémoire. Avoir une quantité discrète d'affichages dans une vue sert à ses fins pratiques, après tout (sinon, pourquoi seraient-ils là en premier lieu?).

Quant à votre deuxième question (impact sur les performances de filtres supplémentaires, etc.), oui, l'ajout de certains paramètres à votre vue affectera les performances. Si vous voulez savoir exactement combien, vous pouvez aller dans admin / structure / vues / paramètres (si vous êtes dans D7) et sélectionner Afficher les informations et les statistiques sur la vue pendant l'aperçu en direct , Afficher la requête SQL et Afficher les statistiques de performances . Voici une capture d'écran de l'écran des performances:

Affiche les paramètres de performances

Si vous êtes davantage intéressé par le comportement des requêtes (combien de lignes sont analysées, quelles clés sont utilisées), vous pouvez copier la requête à partir de l'interface Vues (une fois que vous avez sélectionné "Afficher la requête SQL"), et analyser la requête en utilisant la explaincommande MySQL . Il existe de nombreux articles comme celui-ci à explainutiliser sur Google.

barista amateur
la source
1
Une question de suivi: lorsque vous dites que les affichages enfants sont chargés en mémoire, les ensembles de résultats de tous les affichages sont-ils chargés, ou seulement les chaînes de requête elles-mêmes?
PetroleumJelliffe
1
@PetroleumJelliffe Une instance de classe représentant chaque affichage est attachée à une instance de classe View. Les résultats de la base de données ne sont récupérés que pour l'affichage "actif" actuel, de sorte qu'aucune des autres instances d'affichage attachées ne contient les résultats de la base de données ou les chaînes de requête, d'ailleurs. Pour autant que je sache, les chaînes de requête dans les affichages de vues sont construites uniquement pour l'affichage actif en cours d'exécution.
barista amateur