Development

Share and options

Le cache

Chapître se concentrant sur la gestion des caches.

Performance

Drupal est un outil pouvant se révéler puissant par son aspect modulaire, malheureusement de l'abus de cette modularité naît souvent des problèmes dont la nuisance peut facilement effacer la valeur ajoutée des avantages de l'outil. L'un des plus important est l'aspect performance. Au fil des années Drupal a grossit, pour, à l'heure de Drupal 7, peser plus de 200 000 lignes de codes. Parmis ces lignes figurent non loin de 70 000 lignes d'un design historique et poussiéreux, tout droit héritées de Drupal 6 et précédents.

My wrong behavior in community work

Today, I was enjoying a boring and alone day, after a incomplete night spent in a very light sleeping state. When I started my day, as always, I turned on my screen and started looking up at Drupal core issue queues, int order to see if some answers magically spawned during the night : as always, U.S. people are the most active while we europeans are deeply asleep.

Today, the main concern for me was a bunch of issues about core handling transactions and some others module related issues. Along those, an old one was stalling where I took the habit to argue louder, entitled Add a persistent key/value store for non-configuration state. I will name this issue The One.

Retour du DrupalCamp Nantes 2011

De retour du DC Nantes 2011, après avoir beaucoup dormi et absorbé une quantité certaine de café, j'ai enfin 5 minutes pour partager mes slides. Pour information, ils ont été créé avec Beamer.

Merci à la patience de tous ceux ayant assisté à ma courte session, c'est dans un état de fatigue assez improbable mais avec beaucoup de plaisir que j'ai échangé avec vous sur le sujet des performances. J'espère que le peu d'information que j'ai pu apporter vous sera utile.

Comme promis, voici quelques liens aggrégés ces 10 dernières minutes (j'avoue ne pas tous les avoir lus en entier).

Des caches Drupal! (et surtout des caches)

Comme promis dans l'article précédent, je vais vous introduire la gestion du cache dans Drupal 7. Dans cet article, je ne vais pas m'étendre sur les politiques de cache d'un point de vue du développeur, mais plutôt du choix du backend approprié en fonction de l'environnement. Cet article a donc vocation de se placer plutôt côté architecte ou administrateur système.

Je suis moi même développeur, architecte n'est pas mon métier, cependant avoir un point de vue éclairé sur les problématiques que rencontrent ces derniers – sans pour autant être un expert – peut amener à se poser des questions sur le code que l'on produit. L'architecture et le design d'une application web (ou d'un sous-ensemble de cette dernière) poussent à se poser la question d'une politique de gestion de cache efficace. Pour mener à bien la conception d'une politique de cache, il faut comprendre les problèmatiques qui se posent derrière.

Cet article va être tourné plus particulièrement à la gestion du cache dans Drupal 7, qui à été grandement améliorée depuis Drupal 6. L'accent sera mis sur les différents backends.

Note de fin de soirée : Terminant cet article, je me suis rendu compte que ma simple introduction à la problématique elle même s'avère être suffisament consistente pour exister en tant qu'article complet. C'est pourquoi je m'arrête ici ce soir. Je vous souhaite une bonne lecture.

Des caches Drupal! (et un peu APC aussi)

Bonjour à tous, comme convenu dans mon premier article, qui était un étalage de benchmark peu revelant significatifs (je finis toujours par retrouver le mot français, déformation professionnelle vous me direz), voici un article concernant les optimisations basiques obligatoires à effectuer pour des sites Drupal. Ces techniques sont issues de presque 3 ans d'expérience avec le framework, mais surtout du travail conjoint de plusieurs personnes, notamment Régis (notre admin système, PHP warrior qui plus est).

Cet article traitera brièvement des options APC, puis s'étendra sur la mise en place de backend de cache multiples sur Drupal 7, comment faire, lesquels choisir, et comment en mesurer l'impact. Je ne m'attarderais pas sur l'optimization du serveur SQL qui est un métier à part entière. De plus le débat ne m'intéresse pas puisque la communauté Drupal préfère toujours utiliser MySQL alors que PostgreSQL est bien supérieur, à tous les niveaux.

Mise à jour du 11/01/2011 : Merci à gagarine de m'avoir signalé que l'option apc.optimization à été supprimée depuis la version 3.0.13 d'APC.

Comment bien optimizer un Drupal 7

Après de longues heures de benchmarks divers et variés, j'ai enfin réussi à avoir obtenir une configuration optimum pour faire tourner un Drupal 7 correctement. Comme des bons exemples valent mieux que mille mots, voici en image comment faire :

Pour le benchmark, je vais utiliser la commande ab -n 100 -c 4 http://blog-d7.guinevere/

Code snippet: human readable to machine name

This PHP code snippet compute nice machine name (i.e. with only alpha numerical characters, keeping inside hyphens) from a formated human readable name.

Useful for some automatic machine name identifiers computing from human readable arbitrary titles, I use it sometime in Drupal modules.

<?php
/**
* Helper that generates a machine name using a provided human readable name.
*
* @param string $human_name
*   Human readable name.
*
* @return string
*   Machine name cleaned-up of any special chars.
*/
function human_to_machine($human_name) {
  return
strtolower(preg_replace(array(
   
'/[^a-zA-Z0-9]+/',
   
'/-+/',
   
'/^-+/',
   
'/-+$/',
  ), array(
'-', '-', '', ''), $human_name));
}
?>

System Theme 6.x-1.0 module released

Today I released the System Theme++ module on drupal.org. This module is a simple administration theme admin page alteration. It allow site administrator to force Drupal to switch to administration theme on arbitrary pages.

You can download it here: http://drupal.org/project/system_theme

I started developping the module while I was training a client to develop with Drupal. It then has been enhanced to fit with some customer projects. Now, it's stable.

Daily WTF

Today, I found the strangiest bug of the month; I was parsing some date parts with JavaScript to properly set default month of a YUI Calendar instance.

var month = parseInt(Drupal.settings.mymodule.date.month) - 1;
myCalendar.setMonth(month);

Why -1? Because month count starts with 0 in YUI Calendar, January is 0, december is 11; everything is fine until here.

1. Why the FUCK does my calendar always get to december?

Pages