Dois-je réutiliser les champs Drupal existants ?
Publié: 2022-02-16Parfois, nous sommes en mesure de donner des conseils très clairs : "Fais ça !" ou "Ne fais pas ça!"
Ce ne sera pas l'un de ces articles de blog.
Drupal vous donne la possibilité de réutiliser les champs. Si vous avez un champ "Image", vous pouvez choisir d'utiliser ce même champ sur chaque type de contenu de votre site. Cependant, il n'est pas toujours clair si la réutilisation des champs est une bonne idée. Parfois oui, parfois non.
Voici un aperçu des avantages et des inconvénients à considérer avant de réutiliser les champs Drupal.
Conseils généraux sur la réutilisation des champs
Vous pouvez choisir la fonctionnalité "Réutiliser un champ existant" chaque fois que vous allez dans "Structure", puis "Types de contenu" et cliquez sur "Gérer les champs" pour un type de contenu.
La documentation Drupal.org utilise pour recommander officiellement de ne pas réutiliser les champs :
Il est recommandé de créer de nouveaux champs plutôt que de réutiliser ceux qui existent déjà, sauf si vous avez une raison claire de le faire.
Cependant, ces conseils sont devenus plus nuancés ces dernières années, et Drupal dit officiellement qu'il s'agit à la fois d'avantages et d'inconvénients.
La documentation Drupal Field UI contient une section détaillée intitulée "Réutilisation des champs":
Il existe deux raisons principales pour réutiliser les champs. Tout d'abord, la réutilisation des champs peut vous faire gagner du temps lors de la définition de nouveaux champs. Deuxièmement, la réutilisation des champs vous permet également d'afficher, de filtrer, de regrouper et de trier le contenu par champ sur tous les types de contenu. Par exemple, le module Vues contribuées permet de créer des listes et des tables des matières. Ainsi, si vous utilisez le même champ sur plusieurs types de contenu, vous pouvez créer une vue contenant tous ces types de contenu affichant ensemble ce champ, triés par ce champ et/ou filtrés par ce champ. Il existe une raison principale pour ne pas réutiliser un champ : des autorisations différentes. Par exemple, vous pouvez avoir besoin de différents rôles d'utilisateur pour avoir différents niveaux d'accès à un champ, selon le type de contenu auquel il a été ajouté. Cela peut être difficile si vous réutilisez un champ.
Avantage : la réutilisation des champs peut simplifier votre
Oui, il peut y avoir un gain de vitesse, mais les gains de temps sont très faibles. Un avantage plus convaincant est que la réutilisation des champs peut parfois simplifier l'administration du site. Web Initiative résume bien cela :
La réutilisation des champs peut également réduire la complexité du système. Au lieu de créer et de maintenir 10 champs différents, les administrateurs Drupal ne gèrent que deux champs et leur documentation. Les administrateurs de base de données n'ont besoin d'améliorer les performances que de deux tables supplémentaires. KISS est toujours un bon principe.
Il serait certainement plus facile d'appliquer des autorisations, des paramètres et des éléments de conception à un champ réutilisé plutôt qu'à 10 champs uniques.
Avantage : certains contenus fonctionnent bien avec des champs réutilisés
Revenons à nouveau à la documentation de l'interface utilisateur Drupal Field :
la réutilisation des champs vous permet également d'afficher, de filtrer, de regrouper et de trier le contenu par champ sur tous les types de contenu. Par exemple, le module Vues contribuées permet de créer des listes et des tables des matières. Ainsi, si vous utilisez le même champ sur plusieurs types de contenu, vous pouvez créer une vue contenant tous ces types de contenu affichant ensemble ce champ, triés par ce champ et/ou filtrés par ce champ.
Un auteur de commentaires sur la documentation de Drupal.org fait la même remarque à propos de Views. Ils soulignent que les vues peuvent combiner le contenu de manière sophistiquée. Ainsi, si vous avez plusieurs types de contenu différents, avec des champs de date différents, les vues peuvent les combiner en une seule vue. Cependant, ils soulignent également que Views n'est pas si sophistiqué avec le tri. Ainsi, si vous avez plusieurs types de contenu différents, avec des champs de date différents, Views aura du mal à trier le contenu sur tous ces champs de date différents.

Inconvénient : les champs réutilisés ne sont pas flexibles
Brandon Williams sur Twitter a bien résumé cela :
au début c'est une bonne idée, mais donnez-lui quelques semaines, les exigences changent, vous finissez par en créer de toute façon
Dans une large mesure, si vous choisissez des champs réutilisés, vous limitez les modifications que vous pourrez facilement apporter ultérieurement à vos données. Les mises à jour prennent également beaucoup plus de temps car vous devez modifier chaque champ individuellement.
Inconvénient : les champs réutilisés rendent les données plus difficiles à exporter ou à migrer
La réutilisation des champs peut devenir un problème lorsque vous devez exporter vos données ou lorsque vous devez migrer vers une nouvelle version de Drupal ou une autre plateforme.
Chaque champ Drupal a sa propre table de base de données, comme indiqué ci-dessous. L'extraction de ces données peut être difficile. Le module Fonctionnalités (le moyen le plus courant d'exporter des données Drupal) a longtemps lutté avec les champs partagés, bien que les versions actuelles puissent les gérer plus efficacement.

Ce conseil est similaire à nos réflexions sur l'utilisation de plusieurs sites. Chaque fois que vous commencez à créer des dépendances entre les bases de code ou les tables de base de données, vous ajoutez de la complexité à votre site.
Avantage ou inconvénient ? Performance
La documentation Drupal décrit un avantage possible de la réutilisation des champs :
La réutilisation des champs accélère non seulement l'exécution de Drupal, mais facilite également la maintenance de votre projet.
Ce fil sur Stack Overflow a une discussion très pertinente sur les performances. Il inclut ce commentaire :
Un vrai problème cependant est le nombre de champs que vous avez. Parce qu'actuellement dans Drupal 7, la configuration complète de tous les champs, qu'ils soient chargés ou non, est extraite du cache à chaque requête. J'ai vu des sites avec plus de 250 champs, où le chargement et la désérialisation de la configuration des champs nécessitent plus de 13 Mo de mémoire."
Ainsi, la réutilisation des champs pourrait éventuellement améliorer légèrement les performances en nous permettant d'avoir un nombre total de champs inférieur.
Cependant, ces petites améliorations peuvent être perdues ailleurs. Ceci de Web Initiative à nouveau :
[fields] complexité supplémentaire à un système Drupal. Lors de la création d'un nouveau champ, la définition du champ est ajoutée à la table de classe de champ et la configuration du champ est ajoutée à la table d'instance de champ ; pendant ce temps, une nouvelle table est ajoutée à la base de données Drupal pour stocker les données du champ. Les tables de base de données ajoutent de la complexité au système. De plus, les requêtes de nœuds entraîneront des expressions JOIN de tables aux données de champ. Plusieurs JOIN auront un impact sur les performances de la base de données car MySQL répond mal aux requêtes avec plusieurs JOIN de tables s'il n'est pas correctement configuré.
Résumé
Désolé que nous n'ayons pas de réponse facile à cette question. C'est une question où vous bénéficierez de la lecture autour de la question et de la compréhension des avantages et des inconvénients. Si vous créez un site réel, cela vaut la peine de construire le site dans un environnement de test pour en savoir plus sur l'impact de ces avantages et inconvénients sur les besoins de votre site.