Drupal : Best Worst current practice 
Par Frédéric G. Marand 
1/66 • Drupal : worst current practice • © OSInet
2/66 • Drupal : worst current practice • © OSInet 
Drupagora 
Paris le 14 novembre 2014
DRUPAGEDDON 
3/66 • Drupal : worst current practice • © OSInet
Introduction 
CAS D'ÉCOLE : DRUPAGEDDON 
LES DONNÉES 
https://www.drupal.org/SA-CORE-2014-005 
https://www.drupal.org/PSA-...
OSInet, 
UN REGARD SPÉCIFIQUE DANS 
L’ÉCOSYSTÈME DRUPAL 
6/66 • Drupal : worst current practice • © OSInet
Introduction 
CONTRIBUTEURS AUX PROJETS LIBRES 
7/66 • Drupal : worst current practice • © OSInet 
OSInet 
• Contributeurs...
Introduction 
ACTIVITÉ 
AUDIT CONSEIL 
LEAD DÉV ARCHITECTURE 
8/66 • Drupal : worst current practice • © OSInet
Introduction 
L’AUDIT TECHNIQUE DRUPAL 
Problèmes récurrents motivant les audits : 
9/66 • Drupal : worst current practice...
Introduction 
Quand les erreurs sont-elles 
constatées ? 
• Durant l’acquisition 
• Durant la réalisation 
• Durant le fon...
Introduction 
Quelles sont les erreurs les plus 
fréquentes ? 
• Délais (coûts) excessifs de réalisation 
• Régressions du...
Introduction 
Qui est source d’erreurs ? 
• L’agence réalisatrice : mauvaises techniques de réalisation 
• Le studio graph...
BUY 
15/66 • Drupal : worst current practice • © OSInet
Propriété intellectuelle 
Bloquer sur cession de propriété vs concession de licence 
• Définition du besoin 
• Certificati...
Achat 
Le cas des appels d’offres publics 
• Difficulté à déclarer un marché infructueux même 
quand il devrait l’être 
• ...
Achat 
Choix des prestataires : principaux 
problèmes 
Agences de communication 
traditionnelles 
➔ Pas assez techniques p...
19/66 • Drupal : worst current practice • © OSInet 
BUILD
20/66 • Drupal : worst current practice • © OSInet 
Maîtrise 
d'ouvrage
Build 
Ne pas savoir choisir sa version core : 6, 7, 
8 et son type de développement 
— Ces temps-ci… 
• Projets courts, à...
Build 
Ne pas savoir définir ses choix en matière 
de versions contrib 
« STABLE ONLY » : de plus en plus, dans les projet...
Build 
Et plus... 
• Ne pas réceptionner au fil de l’eau — pendant les 
itérations — pour intercepter rapidement les 
dive...
25/66 • Drupal : worst current practice • © OSInet 
Processus de 
développement
Build 
Ne pas utiliser de gestionnaire de versions 
...DU TOUT (dernier en date observé : ce mois-ci !) 
...EFFICACEMENT :...
Build 
Créer un site par accumulation de 
modules contrib à portée limitée 
• Souci additionnel de qualité, fragilité, mai...
Build 
Créer un site par accumulation de 
changements, sans mécanisme de 
déploiement 
• Génération des fichiers 
• Drush ...
Build 
Hacker core/contrib 
• Rarement nécessaire : le plus souvent, c’est un 
manque de connaissances 
• Si nécessaire, c...
Build 
Développer en PHP brut, sans passer par 
les API Drupal 
Exemples typiques, souvent sources de problèmes 
de sécuri...
Build 
Développer sans visibilité des erreurs au 
niveau maximal (error_reporting = -1) 
• Les notices et warnings s’accum...
Build 
Tests de recette et montée en charge 
Ne pas faire de TMC : tout 
va bien sur les postes de 
développement / recett...
Build 
Négliger la prise en compte des pratiques 
permettant l’internationalisation 
• Formats en dur (dates, nombres, mon...
35/66 • Drupal : worst current practice • © OSInet 
OWN
36/66 • Drupal : worst current practice • © OSInet 
Hébergement
Confondre 
hébergement et 
infogérance 
Un site de production a 
besoin d’un infogérant 
(services système) et 
non simple...
Déployer sans cache 
d’opcodes ou sans 
monitoring 
• PHP 5.3 ou 5.4 : APC, 
PHP 5.5 : Opcache 
• Monitoring : apc.php, 
o...
Déployer un 
Memcached sans 
comprendre sa 
configuration 
Own 
• settings.php : clusters, bins, préfixe... 
• extension, ...
Déployer sur un 
système de fichiers 
inapproprié 
• Écritures synchrones : 
NFS système sans 
accélérateur 
• lstat() len...
41/66 • Drupal : worst current practice • © OSInet 
Maintenance 
applicative : 
corrective et 
adaptative
Own 
Ne pas appliquer les MàJ de sécurité dans 
les délais 
Pourquoi ne pas les 
appliquer ? 
• Rigidités entre mainteneur...
Own 
43/66 • Drupal : worst current practice • © OSInet
Travailler sans 
logger 
Own 
CAUSES TYPIQUES : 
• Désactivation de dblog 
faute d’avoir codé à 
error_reporting 
élevé, p...
FRONT : 
PERFORMANCE 
45/66 • Drupal : worst current practice • © OSInet
46/66 • Drupal : worst current practice • © OSInet 
Gestion de 
cache
Cache de pages 
interne 
• Cache interne désactivé 
(cache enabled : 
décoché) 
• Expiration trop courte : 
limitation à l...
Pages non cachables • Écriture dans $_SESSION ou 
$_COOKIE pour les anonymes 
• démarrage de session qui 
marque la page n...
Désaccord sur la 
durée du cache 
• Technique → long 
éditorial → court 
• En l’absence d’une 
stratégie claire, forte 
pr...
Front 
Agrégation des assets 
• Désactivée pour le CSS et/ou le JS 
• généralement, ce n’est pas un oubli, mais le 
presta...
Front 
Domain sharding 
• ABSENCE : 
• Les cookies sont émis par les clients sur les 
requêtes d’asset 
• Avec Varnish ou ...
Et tous les problèmes du back office pour les 
pages non cachées... 
52/66 • Drupal : worst current practice • © OSInet
BACK 
53/66 • Drupal : worst current practice • © OSInet
Back 
Requêtes sortantes durant le cycle de 
page 
• La durée des pages devient > au temps de réponse 
de la ressource ext...
Back 
Pic de charge inexpliqué après une 
longue durée sans problème 
TYPIQUE Utilisation d’un memcached avec l’erreur 
t(...
57/66 • Drupal : worst current practice • © OSInet 
Site 
globalement 
lent sans pic 
spécifique
Back 
Cache de blocs désactivé 
CAUSE Typiquement un ou plusieurs modules de 
node_access 
CONFIRMATION Configurer stark p...
Back 
Cache de données 
Too much of a 
good thing is 
wonderful 
PROBLÈME 1 Cache désactivé — courant sur les 
sites const...
Back 
Cache de variables toujours en MISS 
CAUSE TYPIQUE Un variable_set dans un hook du cycle 
de page : hook_boot / hook...
Back 
Trop grand nombre de requêtes SQL 
DIAGNOSTIC devel.module ou utiliser les 
fonctions de trace de l’API DB 
SOLUTION...
Back 
Trop grand nombre d’interventions de 
hook, notamment sur les nodes 
CAUSE TYPIQUE Trop de modules 
SOLUTION Réduire...
Back 
Autres problèmes courants 
Opérations en boucle (node_load, node_view) au 
lieu d’opérations multiples 
(node_load_m...
CONCLUSION 
64/66 • Drupal : worst current practice • © OSInet
Conclusion 
La clef : compétence 
• Compétence du maître d'ouvrage (MOA) : 
déléguer n’est pas ignorer ⇒ se faire bien 
en...
Conclusion 
66/66 • Drupal : worst current practice • © OSInet
Conclusion 
La clef : compétence 
• Compétence du maître d'ouvrage (MOA) : 
déléguer n’est pas ignorer ⇒ se faire bien 
en...
Conclusion 
Mesurer pour agir 
• Savoir quoi mesurer 
• Savoir sur quoi agir 
selon la mesure 
68/66 • Drupal : worst curr...
Conclusion 
Adapter 
Adapter les pratiques à la taille du projet 
En-dessous de quelques milliers de visites/jour, 
le sta...
PASSEZ NOUS DIRE BONJOUR ! 
Frédéric G. Marand (fgm) Outi Munter (outi) 
www.osinet.fr 
70/66 • Drupal : worst current pra...
71/66 • Drupal : worst current practice • © OSInet 
OSInet 
www.osinet.fr 
sales@osinet.fr
Prochain SlideShare
Chargement dans…5
×

Recueil des mauvaises pratiques constatées lors de l'audit de sites Drupal 7

1 073 vues

Publié le

En 3 ans d'audit de sites Drupal 7 pour identifier des problèmes de performance, qualité, ou sécurité OSInet a identifié les causes d'erreurs les plus fréquentes : en règle général, chaque site audit présente au moins l'une d'entre elles.

Votre site est-il affecté par ces erreurs ?

Publié dans : Logiciels
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 073
Sur SlideShare
0
Issues des intégrations
0
Intégrations
131
Actions
Partages
0
Téléchargements
18
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Recueil des mauvaises pratiques constatées lors de l'audit de sites Drupal 7

  1. 1. Drupal : Best Worst current practice Par Frédéric G. Marand 1/66 • Drupal : worst current practice • © OSInet
  2. 2. 2/66 • Drupal : worst current practice • © OSInet Drupagora Paris le 14 novembre 2014
  3. 3. DRUPAGEDDON 3/66 • Drupal : worst current practice • © OSInet
  4. 4. Introduction CAS D'ÉCOLE : DRUPAGEDDON LES DONNÉES https://www.drupal.org/SA-CORE-2014-005 https://www.drupal.org/PSA-2014-003 EN PRODUCTION : un site qui ne suit pas les bonnes pratiques a des difficultés à appliquer la MàJ rapidement • Combien de minutes avant de déployer sur votre site ? • Pourquoi si longtemps ? • Comment améliorer ? • Comment gérer les suites ? 5/66 • Drupal : worst current practice • © OSInet
  5. 5. OSInet, UN REGARD SPÉCIFIQUE DANS L’ÉCOSYSTÈME DRUPAL 6/66 • Drupal : worst current practice • © OSInet
  6. 6. Introduction CONTRIBUTEURS AUX PROJETS LIBRES 7/66 • Drupal : worst current practice • © OSInet OSInet • Contributeurs Drupal depuis 2005 • 100 % de l’effectif est contributeur Drupal core 8 • Autres contributions depuis 94 : Apache, Beego, Doctrine ODM, FirebirdSQL, MongoDB, Monolog, Samba, Silex… Frédéric G. Marand • (Co-)auteur et (co-)correcteur de plusieurs Security Advisories Drupal • Mainteneur Drupal 7 core XML-RPC • Mainteneur des contribs (References…) http://www.osinet.fr http://bit.ly/drupalosinet @OSInet http://drupal/u/fgm
  7. 7. Introduction ACTIVITÉ AUDIT CONSEIL LEAD DÉV ARCHITECTURE 8/66 • Drupal : worst current practice • © OSInet
  8. 8. Introduction L’AUDIT TECHNIQUE DRUPAL Problèmes récurrents motivant les audits : 9/66 • Drupal : worst current practice • © OSInet • Délais • Performance • Sécurité (réponse aux pénétrations) Les principales erreurs se répètent par ignorance : évitez-les
  9. 9. Introduction Quand les erreurs sont-elles constatées ? • Durant l’acquisition • Durant la réalisation • Durant le fonctionnement • Lors des visites anonymes • Lors de l'utilisation en connecté • Lors des opérations d'exploitation 11/66 • Drupal : worst current practice • © OSInet
  10. 10. Introduction Quelles sont les erreurs les plus fréquentes ? • Délais (coûts) excessifs de réalisation • Régressions durant le développement de code • Coûts excessifs en infrastructure • Failles XSS et autres • Performance front insuffisante • Performance back insuffisante 12/66 • Drupal : worst current practice • © OSInet
  11. 11. Introduction Qui est source d’erreurs ? • L’agence réalisatrice : mauvaises techniques de réalisation • Le studio graphique : maquettes ignorant les spécificités de build Drupal • L’hébergeur : ignorance des contraintes spécifiques de Drupal • La communauté Drupal et Open Source en général : peu de modules / thèmes (aucun ?) ont le même niveau d’exigence qualité que Drupal core • Le donneur d’ordres : analyse insuffisante des besoins, exigences inappropriées 13/66 • Drupal : worst current practice • © OSInet
  12. 12. BUY 15/66 • Drupal : worst current practice • © OSInet
  13. 13. Propriété intellectuelle Bloquer sur cession de propriété vs concession de licence • Définition du besoin • Certification de conformité (compliance) Ignorer l’impact de la viralité de la GPL sur les projets Drupal • Code source PHP, JS • Assets graphiques • Contenus • Look-and-feel 16/66 • Drupal : worst current practice • © OSInet PS I am not a lawyer. Achat
  14. 14. Achat Le cas des appels d’offres publics • Difficulté à déclarer un marché infructueux même quand il devrait l’être • Ne pas être à jour sur le CCAG-PI / CCAG-TIC et les circulaires associées • Définition de l’objet du marché : site vs logiciel • Procédures de recette : spécification vs agilité 17/66 • Drupal : worst current practice • © OSInet
  15. 15. Achat Choix des prestataires : principaux problèmes Agences de communication traditionnelles ➔ Pas assez techniques pour les projets importants SSII (ESN) / SSLL (ENL) traditionnelles ➔ Pas assez créatives pour les projets importants Spécialistes AMOA ➔ Retour sur coût difficile à évaluer avant un premier échec Drupalshops ➔ Pas assez disponibles, problèmes d’agrément dans les grands comptes, pas assez de connaissances autres 18/66 • Drupal : worst current practice • © OSInet
  16. 16. 19/66 • Drupal : worst current practice • © OSInet BUILD
  17. 17. 20/66 • Drupal : worst current practice • © OSInet Maîtrise d'ouvrage
  18. 18. Build Ne pas savoir choisir sa version core : 6, 7, 8 et son type de développement — Ces temps-ci… • Projets courts, à courte durée de vie (événementiel, one-off) : 7, build basique • Projets plus longs, livrés début 2015, destinés à une refonte assez rapide : 7, build best practice (cf session Best Practice) • Projets plus longs, livrés mi-2015, destinés à un cycle de vie plus long : 8, build best practice • Évoluer les sites bloqués en 6 en mode découplé/composant. • Ne plus lancer de nouveaux projets en 6 22/66 • Drupal : worst current practice • © OSInet
  19. 19. Build Ne pas savoir définir ses choix en matière de versions contrib « STABLE ONLY » : de plus en plus, dans les projets Drupal, « stable » est synonyme d'« obsolescent » ⇒ coûts de maintenance adaptative « ANYTHING GOES » : risque que les constructeurs utilisent des modules expérimentaux, sans cycle de mise à jour disponible, voire non maintenus ⇒ coûts de maintenances corrective et adaptative 23/66 • Drupal : worst current practice • © OSInet
  20. 20. Build Et plus... • Ne pas réceptionner au fil de l’eau — pendant les itérations — pour intercepter rapidement les divergences (héritage du cycle en V) • Lors des réceptions d’itération, ne pas vérifier l’état de propreté du site (installation from scratch possible, absence de doublons fonctionnels, de traces de composants abandonnés...) 24/66 • Drupal : worst current practice • © OSInet
  21. 21. 25/66 • Drupal : worst current practice • © OSInet Processus de développement
  22. 22. Build Ne pas utiliser de gestionnaire de versions ...DU TOUT (dernier en date observé : ce mois-ci !) ...EFFICACEMENT : • code commenté en production au lieu d’être dans une révision • commentaires de commit inutilisables • commits trop espacés • pas de process de branching réfléchi (eg: git flow, github flow…) 26/66 • Drupal : worst current practice • © OSInet
  23. 23. Build Créer un site par accumulation de modules contrib à portée limitée • Souci additionnel de qualité, fragilité, maintenance et MàJ • Sauf dans le cas de couverture à 100 % de la fonctionnalité, l’adaptation est à long terme plus coûteuse qu’un spécifique 27/66 • Drupal : worst current practice • © OSInet
  24. 24. Build Créer un site par accumulation de changements, sans mécanisme de déploiement • Génération des fichiers • Drush Makefile / Composer : – Avantages: dépôt léger, MàJ permanente – Inconvénients : dépendance sur la disponibilité du réseau, non-compliance, MàJ permanente = risque de casse • Vendoring : – Avantages : disponibilité, rapidité, compliance – Inconvénients : défaut de MàJ automatique, dépôt lourd • Profil(s) d’installation Drupal • Chargement des données par migration (Migrate API) 28/66 • Drupal : worst current practice • © OSInet
  25. 25. Build Hacker core/contrib • Rarement nécessaire : le plus souvent, c’est un manque de connaissances • Si nécessaire, committer les patches de façon reproductible (ex : drush makefile, répertoire patches …) 29/66 • Drupal : worst current practice • © OSInet
  26. 26. Build Développer en PHP brut, sans passer par les API Drupal Exemples typiques, souvent sources de problèmes de sécurité : • API de bases de données natives au lieu de DB API/Schema API (injection SQL) • Accès aux superglobals, notamment $_GET (XSS) • Stockage de données privées dans $_COOKIE au lieu de $_SESSION (mascarade) • Actions de modification sur GET sans jeton ou formulaire non protégé (CSRF) 30/66 • Drupal : worst current practice • © OSInet
  27. 27. Build Développer sans visibilité des erreurs au niveau maximal (error_reporting = -1) • Les notices et warnings s’accumulent durant le développement • En fin de projet, on constate des masses d’insertions dans dblog (2014 : 1500 insertions watchdog/seconde sur un site) et plus le temps de corriger donc on le désactive • Du coup, plus de suivi des vraies alertes 31/66 • Drupal : worst current practice • © OSInet
  28. 28. Build Tests de recette et montée en charge Ne pas faire de TMC : tout va bien sur les postes de développement / recette Tester sur un environnement non iso-prod Tester depuis un poste local, notamment le serveur front Tester uniquement en anonyme 33/66 • Drupal : worst current practice • © OSInet
  29. 29. Build Négliger la prise en compte des pratiques permettant l’internationalisation • Formats en dur (dates, nombres, monnaies) au lieu des API Drupal • Assemblage de chaînes traduites : exemple t($a) . t($b) • Chaînes de texte non traduites dans les templates et modules 34/66 • Drupal : worst current practice • © OSInet
  30. 30. 35/66 • Drupal : worst current practice • © OSInet OWN
  31. 31. 36/66 • Drupal : worst current practice • © OSInet Hébergement
  32. 32. Confondre hébergement et infogérance Un site de production a besoin d’un infogérant (services système) et non simplement d’un hébergeur (location de matériel et infrastructure pour le ranger) • Backups • Configuration, MàJ et monitoring du serveur Web et ses modules, PHP et ses extensions, bases de données, serveurs de cache, serveur de file d’attentes, etc Own 37/66 • Drupal : worst current practice • © OSInet
  33. 33. Déployer sans cache d’opcodes ou sans monitoring • PHP 5.3 ou 5.4 : APC, PHP 5.5 : Opcache • Monitoring : apc.php, ocp, opcache-status, 38/66 • Drupal : worst current practice • © OSInet opcache-gui… Own
  34. 34. Déployer un Memcached sans comprendre sa configuration Own • settings.php : clusters, bins, préfixe... • extension, persistence, stratégie de hashing, ucp/tcp, text/binaire… • slab size • Monitoring: phpmemcacheadmin, memcache.php… • Un memcached mal réglé peut être beaucoup plus lent qu’un cache en base de données • Typique : • entrées > 1 Mo et slab size par défaut • multisites sans préfixe, • bins saturés, • mélange chaud/froid, gaspillage d’allocation • Documenté à partir de Drupal 7.33 39/66 • Drupal : worst current practice • © OSInet
  35. 35. Déployer sur un système de fichiers inapproprié • Écritures synchrones : NFS système sans accélérateur • lstat() lents provoqués pour include_once -> tune realpath cache Own 40/66 • Drupal : worst current practice • © OSInet
  36. 36. 41/66 • Drupal : worst current practice • © OSInet Maintenance applicative : corrective et adaptative
  37. 37. Own Ne pas appliquer les MàJ de sécurité dans les délais Pourquoi ne pas les appliquer ? • Rigidités entre mainteneur et infogérant (procédures de déploiement) • Absence de réactivité du mainteneur • Difficultés de MàJ : typiquement conséquence des hacks core/contrib 42/66 • Drupal : worst current practice • © OSInet
  38. 38. Own 43/66 • Drupal : worst current practice • © OSInet
  39. 39. Travailler sans logger Own CAUSES TYPIQUES : • Désactivation de dblog faute d’avoir codé à error_reporting élevé, pour faire face aux masses de notices • Absence d’utilisation de syslog ou d’un mécanisme plus tolérant comme mongodb_watchdog 44/66 • Drupal : worst current practice • © OSInet
  40. 40. FRONT : PERFORMANCE 45/66 • Drupal : worst current practice • © OSInet
  41. 41. 46/66 • Drupal : worst current practice • © OSInet Gestion de cache
  42. 42. Cache de pages interne • Cache interne désactivé (cache enabled : décoché) • Expiration trop courte : limitation à la scalabilité interne (liée à l’infra propre) et non externe (web scale) Front 47/66 • Drupal : worst current practice • © OSInet
  43. 43. Pages non cachables • Écriture dans $_SESSION ou $_COOKIE pour les anonymes • démarrage de session qui marque la page non cachable • génération complète au hit suivant • grosse limite de scalabilité ramenant les anonymes à peu près au niveau des connectés • Utilisation de Varnish et/ou d’un CDN ou autre reverse proxy, mais émission par le code d’en-têtes 48/66 • Drupal : worst current practice • © OSInet de non-cachabilité • suppression de la scalabilité externe • inutilité complète de ces outils Front
  44. 44. Désaccord sur la durée du cache • Technique → long éditorial → court • En l’absence d’une stratégie claire, forte probabilité d’une absence de prise en charge technique valide Front 49/66 • Drupal : worst current practice • © OSInet
  45. 45. Front Agrégation des assets • Désactivée pour le CSS et/ou le JS • généralement, ce n’est pas un oubli, mais le prestataire indique que le site ne fonctionne pas avec : c’est le signe d’une erreur de réalisation, le plus souvent pour le code JS • Simple : il y a des mécanismes d’agrégation avancée plus efficaces, comme le module advagg, notamment si on utilise un CDN avec le module CDN 50/66 • Drupal : worst current practice • © OSInet
  46. 46. Front Domain sharding • ABSENCE : • Les cookies sont émis par les clients sur les requêtes d’asset • Avec Varnish ou un autre reverse proxy : nécessite un VCL spécifique pour permettre de les ignorer et servir quand même de cache • EXCÈS : multiplication des requêtes DNS pour les clients 51/66 • Drupal : worst current practice • © OSInet
  47. 47. Et tous les problèmes du back office pour les pages non cachées... 52/66 • Drupal : worst current practice • © OSInet
  48. 48. BACK 53/66 • Drupal : worst current practice • © OSInet
  49. 49. Back Requêtes sortantes durant le cycle de page • La durée des pages devient > au temps de réponse de la ressource externe et peut bloquer 54/66 • Drupal : worst current practice • © OSInet • Core: • update (uniquement pour les admins et sur certaines pages) • aggregator, si poormanscron n’a pas été désactivé SOLUTION Consommer dans des scripts CLI lancés par cron ou, mieux, depuis un worker de messaging externe (ex : Beanstalkd)
  50. 50. Back Pic de charge inexpliqué après une longue durée sans problème TYPIQUE Utilisation d’un memcached avec l’erreur t($var) et la taille de cache_locale vient de dépasser 1 Mo VARIANTE Sur un site en évolution, une nouvelle version est beaucoup plus lente en production qu'en développement CONFIRMATION Déboguer l’utilisation du cache avec Heisencache ou XHprof SOLUTION À court terme, augmenter la slab size, et rapidement corriger pour revenir à une taille normale 56/66 • Drupal : worst current practice • © OSInet
  51. 51. 57/66 • Drupal : worst current practice • © OSInet Site globalement lent sans pic spécifique
  52. 52. Back Cache de blocs désactivé CAUSE Typiquement un ou plusieurs modules de node_access CONFIRMATION Configurer stark pour n’avoir que le bloc contenu, basculer dessus momentanément, et comparer : il devrait être considérablement plus rapide SOLUTION 1 Repenser la logique de contrôle d’accès aux données SOLUTION 2 Introduire du cache dans chaque bloc 58/66 • Drupal : worst current practice • © OSInet
  53. 53. Back Cache de données Too much of a good thing is wonderful PROBLÈME 1 Cache désactivé — courant sur les sites construits sur Views et Panels MALGRÉ le cache intégré de Views (durée) et Views Content Cache (invalidation) ET MALGRÉ Panels Hash Cache PROBLÈME 2 Utilisé à niveaux multiples ⇒ Cache de données, puis de fragments, puis d’assemblages, puis de rendu, puis de blocs … = n aller-retours vers le serveur de cache là où un seul suffirait DIAGNOSTIC Heisencache (PerformanceSubscriber) 59/66 • Drupal : worst current practice • © OSInet
  54. 54. Back Cache de variables toujours en MISS CAUSE TYPIQUE Un variable_set dans un hook du cycle de page : hook_boot / hook_init / hook_exit, function de shutdown, etc ORIGINE Confusion entre settings/config/state (formalisés en D8) DIAGNOSTIC var_dump(debug_backtrace(FALSE)) dans variable_set() et remonter la pile pour trouver le coupable VARIANTE Autres caches toujours en MISS SOLUTION GÉNÉRALE Heisencache (WriteSubscriber) 60/66 • Drupal : worst current practice • © OSInet
  55. 55. Back Trop grand nombre de requêtes SQL DIAGNOSTIC devel.module ou utiliser les fonctions de trace de l’API DB SOLUTION Manuelle 61/66 • Drupal : worst current practice • © OSInet
  56. 56. Back Trop grand nombre d’interventions de hook, notamment sur les nodes CAUSE TYPIQUE Trop de modules SOLUTION Réduire le nombre d’implémentations en repensant la logique fonctionnelle HACK hook_module_implements_alter() pour supprimer les situations connues comme ne pouvant donner lieu à une modification en pratique — difficile et fragile, mais résultats rapides 62/66 • Drupal : worst current practice • © OSInet
  57. 57. Back Autres problèmes courants Opérations en boucle (node_load, node_view) au lieu d’opérations multiples (node_load_multiple) 63/66 • Drupal : worst current practice • © OSInet
  58. 58. CONCLUSION 64/66 • Drupal : worst current practice • © OSInet
  59. 59. Conclusion La clef : compétence • Compétence du maître d'ouvrage (MOA) : déléguer n’est pas ignorer ⇒ se faire bien entourer et suivre son projet 65/66 • Drupal : worst current practice • © OSInet
  60. 60. Conclusion 66/66 • Drupal : worst current practice • © OSInet
  61. 61. Conclusion La clef : compétence • Compétence du maître d'ouvrage (MOA) : déléguer n’est pas ignorer ⇒ se faire bien entourer et suivre son projet • Compétences internes ou AMOA • Compétence du maître d'oeuvre (MOE) 67/66 • Drupal : worst current practice • © OSInet
  62. 62. Conclusion Mesurer pour agir • Savoir quoi mesurer • Savoir sur quoi agir selon la mesure 68/66 • Drupal : worst current practice • © OSInet
  63. 63. Conclusion Adapter Adapter les pratiques à la taille du projet En-dessous de quelques milliers de visites/jour, le stack Drupal/LAMP pardonne à peu près tout sauf l’absence de MàJ. 69/66 • Drupal : worst current practice • © OSInet
  64. 64. PASSEZ NOUS DIRE BONJOUR ! Frédéric G. Marand (fgm) Outi Munter (outi) www.osinet.fr 70/66 • Drupal : worst current practice • © OSInet
  65. 65. 71/66 • Drupal : worst current practice • © OSInet OSInet www.osinet.fr sales@osinet.fr

×