Amélioration du temps d’affichage du site.

Depuis quelques temps mon serveur commençait à prendre un peu trop de charge. Le load average du serveur tournait en permanence au-dessus de 20 (alors qu’il n’aurait pas dû passer au dessus de 4).  La faute à quelques scripts un peu trop gourmand en CPU et surtout en lecture/écriture sur disque.

Le plus important écrivait 70Mo par minute, soit plus d’1Mo par seconde. A ça s’ajoutait un peu plus pour la lecture. D’autres scripts accédaient non stop à une base de données contenant 500Mo de data diverses… Et comme je suis loin d’être un pro de l’optimisation je vous laisse imaginer le résultat.

J’ai donc été obligé de changer de machine, de réécrire mes scripts et de faire quelques petites optimisations. Dans l’ordre :

Location d’un serveur plus puissant. Un HG-2010 SSD chez OVH. SSD car les accès disques sont importants, et le produit proposé par OVH me semblait pas trop mal. J’ai en plus pris l’option 48Go pour la RAM, tant qu’à faire autant le faire en grand.

Allégement de la base de données est stockant le résultat des requêtes en RAM avec Memcached (d’où l’option 48Go). De mémoire j’ai alloué 24Go à Memcached, de quoi mettre beaucoup de données.

Utilisation du module mod_expires d’apache. J’ai appris que ce module pouvait faire en sorte de mettre en cache des données dans le navigateur de mes chers visiteurs. Les images sont donc stockées 1 mois ainsi que les fichiers CSS et JS. Pour éviter les bugs avec un CSS ou un JS pas à jour, à chaque mise à jour je change les noms (fichier.css?version=1.15 par exemple). J’ai fait quelques tests avec Firebug + page Speed de Google et le gain est loin d’être négligeable. Le tout peut se gérer avec quelques lignes dans le .htaccess

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css “access plus 1 month”
ExpiresByType text/javascript “access plus 1 month”
ExpiresByType application/x-javascript “access plus 1 month”
ExpiresByType application/javascript “access plus 1 month”
ExpiresByType image/x-icon “access plus 1 month”
ExpiresByType image/ico “access plus 1 month”
ExpiresByType image/vnd.microsoft.icon  “access plus 1 month”
ExpiresByType image/png “access plus 1 month”
ExpiresByType image/gif “access plus 1 month”
ExpiresByType image/jpeg “access plus 1 month”
ExpiresByType image/jpg “access plus 1 month”
ExpiresByType application/x-shockwave-flash “access plus 1 month”
</IfModule>

Pour les quelques images dynamiques j’ajoute un header en PHP

header(“Pragma: public”);
header(“Cache-Control: maxage=”.$expireGraph);
header(‘Expires: ‘ . gmdate(‘D, d M Y H:i:s’, time()+$expireGraph) . ‘ GMT’);
header(“Content-type: image/png”);

Mes 10 fichiers CSS et 13 fichiers js ont été regroupés et compressés avec minify. Je gagne 21 hits sur chaque visiteur + des pages qui gagnent encore en vitesse d’affichage.

J’ai placé le code Google Analytics asynchrone. Je n’ai pas mesuré l’impact, je me fie à la compétence des ingénieurs de Google. Seul petit hic, je n’ai plus d’évènement et je n’ai pas encore trouvé d’où provient le bug… Il faut dire que je n’ai pas cherché longtemps.

Toutes mes anciennes données en cache – celles qui prenaient 1Mo/ seconde en écriture disque – sont passées en RAM avec memcached. Une vrai révolution dans ma façon de coder mais la forte diminution des accès disque a fait passer à lui seul le load average de la machine à 10 (sur le nouveau serveur) à 0.5/2.

Il me reste encore à utiliser les sprites dans les CSS. Mais pour ça il me faudra un peu de temps. Les images et moi ça fait 2. Quand ce sera fait je devrais gagner une vingtaine de hits par visiteurs… Encore un point non négligeable pour la charge serveur et la rapidité du site.

Le bilan de tout ça ?

D’après Google le temps d’affichage moyen d’une page par un visiteur est passé de 6 à 4 secondes (gain >30%). J’ai bon espoir de descendre sous les 3 secondes d’ici quelques temps. Je serais de toute façon limité à cause du temps d’affichage des bannières pub et du marqueur Xiti (d’ailleurs je suis en train de réfléchir à l’enlever)

Google passe moins de 0.5 seconde à crawler une page contre 1.5 seconde avant mes optimisations diverses.

Petite déception, je n’ai pas de modification du nombre de pages vues par visites ou une diminution significative du taux de rebond. Il faut croire que mes visiteurs étaient patient…

Il parait que la rapidité des sites va entrer dans l’algo du classement des sites dans le moteur de recherche. C’est un bon argument pour aller le plus loin possible sur cette route.crawl-google

Chef de projet SEO sur Genève

IC-Agency est une société de conseil en marketing implantée à Genève et à Toronto. Elle travaille pour des sociétés dans le domaine du luxe (Dior, Rolex…) et pour des grands comptes (Nespresso, TF1…).

J’ai travaillé avec eux à la grande époque où je bossais dans une banque Suisse, on a ensuite fait ensemble des tests de leur produit Holistis sur Mataf (mon site). Ils sont très sérieux et mènent leur projet de façon rigoureuse.

Pourquoi j’écris tout ça ? Car ils cherchent un chef de projet SEO pour leur agence de Genève. Si vous parlez anglais, que vous avez une bonne expérience dans le SEO, dans la gestion de projet alors vous pouvez postuler.

Le chef est sur Twitter : David Sadigh
L’annonce complète est sur le site d’IC-Agency ou sur LinkedIn
Ic-Agency a un site web, un blog et un compte Twitter

Le Web temps réel

Il y a fort à parier que sous peu apparaîtrons dans certains logiciels en ligne de trading des fonctionnalités temps réel, pas seulement sur la mise à jour de cours d’actions cotés, mais également sur le flux d’informations suceptibles d’impacter une décision d’achat ou de vente. Ces fonctionnalités, jusqu’ici réservées aux traders, seront certainement disponibles pour tout le monde, pour le meilleur ou pour le pire.

ReadWriteWeb

Ces fonctionnalités temps réelles sont disponibles pour tout le monde depuis bien longtemps (à l’échelle d’Internet). Tous les traders ont les mêmes infos en même temps, qu’ils soient pro ou amateurs. J’avoue qu’il existe peut être un délai suivant les plateformes mais ça dépasse pas quelques petites secondes.

Le temps réel fascine mais, comme le dit RWW, il existe depuis bien longtemps dans le monde merveilleux du trading. Et comme tout le monde le sait maintenant, les traders ne sont pas que des gens qui ont de beaux costumes et boivent du champagnes à la fin de chaque journée en allumant des cigares gros comme le bras, ce sont des personnes qui doivent passer des ordres d’achat et de vente en fonction des opportunités qu’ils trouvent sur les marchés financiers. Et le temps réel dans tout ça n’a pas fait qu’améliorer leur sens du jugement.

Quand le temps réel sera devenu courant nous serons confrontés à une masse d’info, parfois contradictoires à interpréter le plus rapidement possible. Oui oui, le problème ne sera plus d’avoir l’info mais de l’interpréter correctement le plus rapidement possible.

Je reprend l’exemple du trader, chaque premier vendredi du mois nous avons les stats du chomage US qui tombent à 14h30 pile (heure de Paris). Cette info déclenche la plupart du temps un séisme sur le cours des devises. En théorie si le chômage est mauvais le dollar se prend une volée, sinon il monte. Ça c’est la théorie. En pratique un mauvais chiffre peut quand même faire monter le dollar… et vice versa. Tout est dans l’interprétation de ce chiffre replacé dans un contexte.

Ceux qui arriveront à tirer quelque chose du temps réel seront ceux qui arriveront à interpréter les signaux dans leur contexte, qui garderons leur calme et sauront prendre du recul rapidement. Et pour la majorité je pense que le temps réel va ajouter un bruit tel qu’ils seront rapidement dépassé et prendrons de mauvaises décisions sous la panique ou l’euphorie.

Les traders, encore eux, utilisent l’outil informatique de façon intensive pour filtrer, analyser et finalement prendre les décisions à leur place. Il y a fort à parier que cette façon de faire se propage dans tous les domaines. Je pense qu’on va prendre une mauvaise voie en retirant de plus en plus le côté humain des prises de décision… Mais on s’adaptera comme d’hab.

Dans un futur encore plus lointain : clic ici