samedi 2 janvier 2010

Tuning & Optimisation du site Web

dedibox.jpg

Vous le savez certainement déjà, je suis un fan de tuning de site web, c'est l'une de mes grandes passions ;-)

Suite aux nombreuses améliorations déjà réalisées il y a plusieurs mois sur ma Dédibox :

J'ai décidé d'aller plus loin en m'intéressant aux nombreuses recommandations fournies par l'excellent outil Google Page Speed et par Yahoo!.

Voici plusieurs astuces que j'ai mis en place et qui vous donneront peut-être des idées pour votre blog / site internet.

Utilisation d'un vhost pour l'hébergement des ressources statiques

J'ai tout d'abord créé un vhost static.geeek.org dédié aux contenus statiques : images publiés, thème graphique ... Dans Dotclear (plugin "about:config"), j'ai précisé le chemin de ce vhost sur mon disque et son URL visible du Web.

Le but de ce vhost est qu'il soit cookie-free, pour permettre au navigateur de récupérer les images rapidement sans devoir fournir un cookie inutile au serveur Web.

Cette optimisation permet aussi aux proxy HTTP de cacher les ressources statiques. Les proxy HTTP ne cachent pas les images qui sont appelées avec un cookie dans le header http.

Customisation du script Google Analytics

J'ai essayé de faire en sorte que tous les cookies générés par le blog soient associés au "Hostname" www.geeek.org et pas au nom de domaine global geeek.org.

Par défaut le script Google Analytics génère un cookie avec le nom de domaine de votre site. En regardant la documentation de Google Analytics, le script offre la possibilité de diminuer le "scope" du cookie à un vhost précis. Pour cela j'ai utilisé la méthode "_setDomainName" qui permet de définir le scope du cookie.

var pageTracker = _gat._getTracker("UA-605163-4");
pageTracker._setDomainName("www.geeek.org");
pageTracker._trackPageview();

En spécifiant www.geeek.org, le cookie qui est créé sur le client est spécifique au vhost qui héberge le blog. Toutes les requêtes vers les fichiers statiques présents sur static.geeek.org seront ainsi sans cookie.

Utilisation du header "Expire"

Sur un blog, tous les contenus statiques varient que très rarement : les images, les CSS, les fichiers javascripts ... Pour cette catégorie de fichiers, il est possible de définir un délai d'expiration dans la configuration de votre serveur web.

L'idéal est de définir une date d'expiration supérieure à un mois, sauf si vous avez l'habitude de changer régulièrement le thème de votre blog. Les images, les CSS, les javascripts sont ainsi cachés par les navigateurs et sont rechargés dès que leur date d'expiration est atteint où dès que l'utilisateur force le rechargement de la page (CTRL + F5).

Le fait de forcer le cache des images de votre thème peut permettre un énorme gain de bande passante. Surtout si votre thème est super travaillé.

Utilisation des Etag / If-modified-since

La norme HTTP 1.1 offre la possibilité aux clients Web de demander si le contenu d'une page web a été changé. Pour cela le navigateur, dans le cas d'une page qu'il a déjà parcourue, envoi un Etags unique ou une date de dernière modification de la page qui lui a été fourni par le serveur lors de sa dernière visite.

En fonction de ces éléments, le serveur HTTP est capable de décider par lui même s'il est nécessaire de renvoyer la page Web au client. Si nécessaire, tout le contenu de la page est envoyé au client, sinon une réponse HTTP 304 est retournée au client pour lui indiquer que la page n'a pas été modifiée.

Sur Geeek, cette vérification est réalisée dès l'entrée dans le index.php de la plateforme de blog. Cela permet dès les premières lignes de code de savoir s'il est nécessaire ou non de retourner une réponse 304 au client.

Les Etags vous permettent d'économiser du CPU et de la bande passage pour les nombreux spiders qui visitent votre site Internet à longueur de journée. Ces Etags doivent très certainement permettre à Google d'économiser des millions de Giga bytes de bande passage. Il est tout à fait possible que la gestion des Etags influent sur le ranking Google.

Par défaut Dotclear gère les Etags et les header if-modified-since, cependant cette gestion est faite à la fin du Workflow de délivrance d'une page.

Gzip des pages dans le cache

Afin de diminuer la taille du cache mémoire, la taille du trafic réseau et la quantité de CPU consommée par le serveur, les pages mises en cache mémoire sont gzippées dès leur insertion (via la fonction php gzencode)

A chaque requête HTTP d'un client, si la page est présente dans le cache, elle est retournée au client directement gzippée (si le navigateur supporte le gzip). Cela permet de réduire par 3 ou 4 la bande passante consommée par les pages HTML, et indirectement le temps de chargement de la page par le navigateur.

J'espère que ce petit article est clair, n'hésitez pas à poster un commentaire si vous trouvez ces optimisations utiles ou inutiles et si vous avez d'autres idées d'optimisations possibles.

En attendant, ma Dédibox "standard" a une charge CPU moyenne de 8% pour 200 000 hits / jour. Je pense qu'elle peut absorber au max une charge de 30 000 visiteurs journaliers.

lundi 14 décembre 2009

Astuce Dotclear #6 : Lister les plus gros commentateurs

Vous chercher à lister les plus gros commentateurs de votre blog Dotclear ?

Voici une requête SQL qui vous permettra d'obtenir la liste des 100 plus gros commentateurs par ordre descendant de commentaires postés.

SELECT DISTINCT dc_comment.comment_email, comment_author,  COUNT( dc_comment.comment_id ) AS countComment
FROM  `dc_comment`
GROUP BY dc_comment.comment_email
ORDER BY countComment DESC
LIMIT 0 , 100

Sur Geeek, les plus gros commentateurs d'articles sont :

  1. spawnrider
  2. maley
  3. pyknite
  4. Worx
  5. Kara-ci.info
  6. entraks
  7. wan
  8. borkmadjai
  9. 404
  10. Damien ALEXANDRE
  11. SiMON
  12. Nonepse
  13. pyknite
  14. Delfkhyn
  15. Modérateur
  16. mrnico
  17. joris

Merci à vous ;-)

lundi 16 novembre 2009

Dotclear : Install Party 4

Vous débutez dans le blogging? Vous hésitez encore entre Wordpress et Dotclear ?

Une nouvelle "install party" de Dotclear est organisée le dimanche 29 novembre, c'est ouvert à tous les curieux, et il y aura des personnes passionnées et super intéressantes sur place (Kozlika, Franck, Jean-Michel, Lomalarch ..)

Et pour les personnes qui souhaitent découvrir le fabuleux monde du CSS, un atelier " Je me mets aux CSS" est prévu à 11h et 16h par Kozlika.

Les coordonnées de l'événement :

Dimanche 29 novembre 2009
de 10h à 18h
au Tamm Bara
7 Rue Clisson
Paris XIIIe

View Larger Map

Voir l'annonce complète sur le site de Dotclear

lundi 16 mars 2009

Preview du nouveau thème du blog

Comme annoncé précédemment, blog de Geeek se prépare à changer de thème. Le nouveau thème du blog est en phase de spécifications depuis plusieurs jours, et je souhaite aujourd'hui vous présenter un "draft" pour avoir votre ressenti.

Ce draft a été créé à partir d'idées trouvées ici et et il tient compte de vos remarques.

theme-geeek.jpg


  • Nouveau logo : Le chiffre 3 rappelle le L33T et met en avant la présence de 3 "e" dans le nom de domaine.
  • Couleurs : Je suis resté dans quelque chose de très sobre et de très aérien.
  • Formes : Fini le formes carrés, laissons la place aux arrondis et aux dégradés.

J'attends avec impatience vos premiers commentaires et retours sur le design ;-)

mardi 17 février 2009

Optimisation de la consommation CPU de mon serveur Dedibox

serveur_dedibox.gif

Depuis quelques jours, je me suis lancé dans une phase d'optimisation de la consommation CPU de ma Dédibox et voici le résultat :

optimisation_cpu.png

Comme vous pouvez le constater, le résultat est plutôt positif. Depuis le 14 février, la consommation CPU moyenne de mon serveur est descendue aux alentours de 7%. Les pics d'activité ne se font plus du tout ressentir sur le CPU du serveur.

J'utilise déjà un cache mémoire au niveau de mon blog qui me permet cacher les pages HTML afin d'éviter de les régénérer à chaque nouveau visiteur. Ce cache mémoire me permet d'économiser beaucoup de CPU, la plupart des pages délivrées par Dotclear sont en fait des pages déjà générées et gardées en mémoire par APC.

Mes optimisations de ces derniers jours ont portés sur 4 points :

  • Le tuning de la base MySQL : J'ai utilisé le fameux script d'optimisation qui m'a donné pas mal de bons conseils sur les options à modifier dans ma configuration MySQL afin d'optimiser les performances de ma base, notamment sur les options du Query Cache.
  • La suppression des snaps dans les commentaires et remplacement par des Gravatars : les billets qui possèdent 230 commentaires sont très problématiques, ils augmentent le nombre de hits HTTP et dégradent inexorablement les performances du serveur. A chaque commentaire une requête HTTP de chargement de l'avatar était réalisée, pour un article qui possède 230 commentaires, 231 requêtes HTTP sont envoyées pour charger l'ensemble du contenu de la page. J'ai donc décidé de déléguer aux serveurs Gravatar la gestion des avatars des commentaires sur mon blog.
  • La modification des plugins qui utilisent le script "load_plugin_file.php" pour le chargement des ressources statiques. Je préfère déléguer le chargement des ressources statiques des plugins à Lighttpd, cela me permet d'économiser mon pool de threads PHP et donc d'économiser du CPU. J'ai donc modifié le plugin "lightbox" et "atReply" pour mes besoins.
  • La suppression dans mon thème des tags "EntryNext" et "EntryPrevious" dont les requêtes SQL sont assez gourmandes en CPU (surtout si votre blog contient beaucoup d'articles). Aujourd'hui, il n'existe pas vraiment de solution simple pour optimiser ces deux requêtes, j'ai donc préféré supprimer ces tags de mon thème en attendant de trouver une solution plus performante.


Avec cette Dédibox et ces modifications, je devrai pouvoir monter facilement à 50 000 pages vues par jour sachant que serveur délivre aujourd'hui autour de 5000 pages par jour.

Il ne me reste qu'à attendre le prochain gros buzz pour vérifier cette théorie ;-)

lundi 16 février 2009

De retour de l'install party Dotclear

dotclear_logo.png

Je suis de retour de l'install party Dotclear qui s'est déroulée hier à Paris dans la brasserie "Le bon pêcheur".

J'ai pu faire la connaissance de nombreuses personnes dont je ne connaissais que le pseudo et j'ai enfin pu mettre un visage sur ce fameux Olivier Meunier ;-)

Je remercie toute l'équipe d'avoir organisé cette rencontre, et j'encourage tous les utilisateurs de Wordpress à tester au moins une fois Dotclear 2. J'ai moi-même installé Wordpress hier l'histoire de me cultiver et de mourir moins bête, j'ai très vite compris que je continuerai encore longtemps à utiliser Dotclear. Personnellement, je trouve les thèmes Wordpress incompréhensibles ... Je ne sais pas comment font les créateurs de thème font pour s'y retrouver dans ce méli-mélo de code PHP mélangé à du HTML.

Pour les absents, une seconde rencontre aura lieu le 14 mars prochain.

Thème Dotclear 2 : Sterenn

Je viens de réaliser un thème pour Dotclear 2 que j'ai joliment nommé Sterenn. Sterenn signifie étoile en breton, c'est aussi le prénom de ma future femme ;-)

theme-sterenn.jpg

Le thème est distribué en licence GPL 2.0.

http://themes.dotaddict.org/galerie-dc2/details/Sterenn

dimanche 15 février 2009

Rencontre Dotclear : C'est aujourd'hui !

dotclear_logo.png

Pour ceux et celles qui auraient oublié, une rencontre Dotclear est organisée cette après midi à Paris.

Pour en savoir plus, rendez-vous sur le blog Dotclear.

J'y serai présent à partir de 14h. Si vous comptez y aller, ça sera l'occasion de se rencontrer ;-)

- page 1 de 4