Performances, performances, performances !

Performances ! c'est le mot qui revient régulièrement dans beaucoup d'articles que j'ai lus ci et là ces derniers temps. Petite revue de web :

Le plus visible est probablement le fiasco de l'article PHP Performance tips de Google. Tellement de mauvais conseils que les billets en réponse ont fusé sur le Planet PHP et Gwynne Raskind a répondu point par point dans le groupe Make the web faster. Étonnant de voir Google malmené comme ça.

Sur un tout autre sujet, Artisan Numérique publie un benchmark de PostgreSQL entre les versions 8.2 et 8.3 et ensuite avec quelques optimisations. Je suis loin d'être un spécialiste et un grand utilisateur de PostgreSQL mais c'est toujours intéressant surtout avec le flou régnant autour de MySQL depuis le rachat de Sun par Oracle.

La mort de Mickaël Jackson a visiblement donné un petit coup de chaud aux sites people comme l'explique Charles-Christian Croix. Le trafic a plus que doublé en quelques minutes ! Mais à mon avis le plus intéressant dans cette page n'est pas vraiment les chiffres mais plus la comparaison entre les reverse proxy Varnish et Squid dans un commentaire d'un point de vue administration système.

Enfin, ça n'aura échappé à personne s'intéressant un peu à PHP; après une longue gestation, PHP 5.3 est sorti. Cette version apporte son lot de nouveautés au niveau du langage plus ou moins intéressantes (beurk le goto et le séparateur de namespace) mais aussi des améliorations de performances. Dans le forum sur eZ.no, Björn Dieding rapporte un gain de 90% sur Windows avec eZ Publish + PHP 5.3 par rapport au même site tournant avec PHP 5.2 ! Łukasz Serwatka a réalisé le même benchmark sous Linux observant un gain de l'ordre de 20% !

Générer des URL significatives en PHP

Il existe beaucoup de types d'URL possible pour une application web et encore plus de codes pour les générer. Une bonne URL devrait être assez courte mais significative. Par exemple le CMS eZ Publish depuis sa version 3.10 utilise un système assez complexe (en code) mais très souple permettant de produire des URLs selon le format de son choix (avec ou sans majuscule, en conservant ou non les accents, les espaces, choix du séparateur, ...) . Si, on ne trouve pas son bonheur on peut même écrire une extension pour un formatage sur mesure, voir par exemple celle de Damien Pitard sur ez.no optimisant les URLs pour l'indexation de contenu dans Google Actualités.

Quand on écrit une application simple en tout cas, moins générique qu'un CMS comme eZ Publish, on peut faire plus simple. Personnellement, j'aime les URLs de la forme "generer-des-url-en-php", c'est à dire en minuscule sans caractère spécial ni accent avec un tiret comme séparateur, c'est a priori la forme la plus simple et optimisée pour les moteurs de recherche.

Pour produire, une URL de ce type j'utilise une fonctionnalité assez peu connue de la fonction iconv() : la translittération. En gros, iconv() est capable lors de la conversion d'un jeu de caractères à un autre de trouver des équivalences si un caractère ne peut être représenté dans le jeu de caractères cible. Par exemple, si on convertit un é en ASCII, iconv() proposera un e à la place avec l'option TRANSLIT, le symbole € sera lui remplacé par "eur"... C'est d'ailleurs aussi très pratique pour traiter des chaînes de caractères issues de copier coller de traitement de texte comme Word qui insère pas mal de bizarreries.

Le code que j'utilise est le suivant :

<?php
class MonApplicationTools
{
    const LOCALE = 'fr_FR.UTF-8';
    const CHARSET = 'UTF-8';
    const SEPARATOR = '-';
 
    static function initLocale( $locale = self::LOCALE )
    {
        setlocale( LC_ALL, $locale );
    }
 
    static function URLize( $str, $fromCharset = self::CHARSET, $separator = self::SEPARATOR )
    {
        $tmp = iconv( $fromCharset, 'ASCII//TRANSLIT', trim( $str ) );
        $pattern = array( '/[^a-z0-9]/',
                            '/' . $separator . $separator . '+/',
                            '/^' . $separator . '/',
                            '/' . $separator . '$/' );
        $replacement = array( $separator, $separator, '', '' );
        return preg_replace( $pattern, $replacement, strtolower( $tmp ) );
    }
}
 
MonApplicationTools::initLocale();
$url1 = MonApplicationTools::URLize( 'Générer des URL en PHP' );
$url2 = MonApplicationTools::URLize( 'Fraude sur des milliards d\'€ à la Société Générale !!' );
echo $url1 . '<br />' . $url2;
// renvoie
// generer-des-url-en-php
// fraude-sur-des-milliards-d-eur-a-la-societe-generale
?>

Le seul inconvénient de cette méthode est qu'il faut initialiser la locale utilisée par l'application par une locale existante sur le système et reconnaissant les caractères à transformer, ce qui est rarement le cas par défaut mais peut être très utile par ailleurs si on veut par exemple utiliser des formats de dates normalisés et localisés avec strftime(). L'appel de la méthode initLocale() (qui appelle setlocale()) réalise ce travail et aura sa place dans un fichier d'intilialisation globale (connexion à la base de données, définition du __autoload, ...) inclus dans tous les scripts. Il faut également prêter attention au fait que sous Windows, les locales ne s'écrivent pas de la même manière, évidemment, c'eut été trop simple sinon !

Bill Gates contre Steeve Jobs

Vu dans un journal de Snarky sur Linuxfr entre deux histoires du 1er avril pas drôles. J'ai beaucoup aimé la iHouse with no Windows :-)

Windows Vista n'est pas une copie de MacOSX

Voila une perle hilarante trouvée parmi les 1500 articles non lus dans mon agrégateur...

via Laurent Richard sur le Planet GNOME fr

Les oeufs Windows !

Groland en très grande forme une fois de plus. Le plus marrant c'est que c'est tellement vrai !

(Non ce blog n'est pas en train de se transformer en vidéo blog...)

Flux RSS des billets

Flux RSS des billets

Rechercher sur pwet.fr

À retenir

Derniers commentaires

Archives

Nuage de tags

Bioutifoul photos

Quelques liens

Licence d'utilisation

Contenu sous Licence Creative Commons By-Sa

Sauf mentions spécifiques, les billets et les photos publiés sur ce site sont placés sous la licence Creative Commons by-sa.

Pour toute utilisation dépassant le cadre de cette licence, merci de me contacter par e-mail.