Performances lenteur Drupal 7, le Cron

23 janv. 2012Drupal 7.x, performance

Problème de performance, lenteur Drupal6 vs Drupal 7

Il est connu de tout le monde que drupal 7 est plus lent que drupal 6 .... ceci est normal me direz vous ... et bien oui, l'ajout de fonctionnalité dans le core ne se font évidement pas sans une contrepartie.

Cependant, j'ai remarqué sur mes sites en Dev des performances horribles sur le 1er accès au site. Alors moi je me dis que ce n'étais pas possible que les dev drupal aient laissé un temps d'initialisation du framework aussi important ! D'autant que le problème ne se produit que très rarement sur les mêmes sites, passés en production, sur même config serveur dédié.

Les temps de latence remarquées étaient de l'ordre de 15-20sec pour générer la 1ère page ... une horreur quand on fait la demo client ^^

Mais c'est pas possible il est lent votre site ! Non non ne vous inquiétez pas c'est la version de DEV .... :)

Du coup j'ai décidé de me plongé sur ce problème. 

Cron est la solution

Résultat, il s'avère qu'en fait, le problème venait simplement du cron ... vous savez le process qui permet de faire tout un tas de choses, comme un clean DB ou mise à jour du moteur de recherche. 

Sur drupal 6, le cron était dissocié du site, je veux dire par là que si vous ne configuriez pas une tâche cron un de vos dédié ou votre machine perso qui allait visiter l'url cron toutes les  x heures, votre cron n'était jamais lancé.

Et bien sur drupal 7 .. ils ont associé le cron aux visites du site. De base le cron doit se déclencher toutes les 3heures. Sauf que si vous n'avez pas beaucoup de visiteurs cas des sites en dev ^^) et bien toutes les 3 heures à chaque visite d'une page, le cron se lance lors du chargement de votre page ... d'où les 15-20sec d'attentes avec une belle page blanche.

Donc si, comme moi, vous ne pouvez  pas vous permettre que vos clients ou visiteurs ne se tape ce foutu délais, je vous conseille de régler l'exécution du cron de drupal 7 à jamais

Désactivation du cron drupal

admin/config/system/cron

Evidement vous devrez dans ce cas lancer votre cron depuis un process externe.  cette fois ce sera une vrai tache cron linux, ou autre pour les autres ^^

Voici comme configurer votre serveur dédié linux ou machine perso dans le cas d'un hébergement mutualisé.

Vous devez d'abord récupérer le lien à exécuter pour lancer le cron, vous le trouverez dans votre tableau de bord drupal 7

Récupération du lien pour lancer le cron drupal

/admin/reports/statu​s

Edition du crontab linux

 crontab -e

Ajoutez la ligne pour lancer votre cron toutes les 5 heures.

0  */5 *   *   *     /usr/bin/lynx -source http://www.urlsite.fr/cron.php?cron_key=d561az56d16az54df546ze564v6sd854v68frez8g

Ctrl + x pour sauvegarder votre crontab.

Et voilà. Désormais, les tâches lancées dans votre cron drupal seront exécutés par un processus indépendant de vos visiteurs et c'est beaucoup mieux !