Liens permanents sur WordPress

Je viens de découvrir un super plugin WordPress qui va vous permettre de modifier très facilement la structure les liens permanents et de rediriger les anciens liens vers les nouveaux.

Au niveau SEO, la redirection va se faire proprement avec un “301 moved permanently” idéal pour la réindexation par les moteurs de recherches.

Le plugin est très simple a utiliser, il suffit de le mettre dans le répertoire wp-content/plugins/ et ensuite de l’activer, il n’y a rien à configurer

Le plugin sur wordpress.org

Zend Framework : Attention aux erreurs

Me revoilà, je fais pas mal de veille en ce moment pour le développement de la nouvelle version de Wanarun.

J’ai décidé de me baser sur le Zend Framework et j’ai créé une sur-couche pour placer mes objets.

J’ai donc crée un Load pour Wanarun :

  1. class Wanarun_Loader extends Zend_Loader
  2. {
  3. }

que je charge en début de page :

  1. set_include_path(dirname(__FILE__).'/../framework/wanarun/library/'.PATH_SEPARATOR.get_include_path());
  2. require_once "Wanarun/Loader.php";
  3. Wanarun_Loader::registerAutoload();

Je travaillais sur la version 1.7.4 jusqu’a récemment ou je me suis retrouvé complétement bloqué sur un bug assez bizarre : plus aucune erreur, uniquement une page blanche…

Il se trouve que dans le Loader Zend sur la version 1.7.4 on avait droit à (ligne 82-83) :

  1. ...
  2. self::_securityCheck($file);
  3. @include_once $file;
  4. ...

Donc bien sur, aucun probleme d’erreur dans le Zend Framework (le @ ne pose pas de problème) mais comme j’héritais du Zend Loader et que j’avais fait une erreur… je ne la voyais pas…

Deux solutions :

  • Upgrader au Zend Framework 1.7.5 qui n’a pas de @
  • Supprimer le @

Encore une fois du temps perdu à cause de ce satané @…personnelement je serais pour le retirer dans la version 6…

Améliorer les performances : partie 1

Voilà je viens de recevoir le livre “High Performance Web Sites“. j’ai donc décidé de commenter une à une les différentes règles et d’essayer de les appliquer sur Wanarun.

Au départ :

  1. Make fewer HTTP requests => note : B
  2. Use a CDN => note : F
  3. Add an Expires header => note : F
  4. Gzip components => note D
  5. Put CSS at the top => note A
  6. Put JS at the bottom => note B
  7. Avoid CSS expressions => note A
  8. Make JS and CSS external => n/a
  9. Reduce DNS lookups => note B
  10. Minify JS => note B
  11. Avoid redirects => note A
  12. Remove duplicate scripts => note A
  13. Configure ETags => note F

Première règle : Réduire la taille du javascript

Ca me semble être une bonne idée, je ne me suis jamais penché sur cette problématique.

Yahoo nous donne quelques pistes et je décide d’utiliser YUI Compressor.

Je décide de compresser la librairie Prototype et la librairie de Wanarun

Résultats de la compression :

  • Wanarun : 62 ko => 37 ko
  • Prototype : 71 ko => 43 ko

Par contre mauvaise nouvelle, une erreur dans le javascript de prototype.

Je teste ensuite ShrinkSafe :

Résultats de la compression :

  • Wanarun : 62 ko => 40 ko
  • Prototype : 71 ko => 50 ko

La compression est moins bonne mais pas d’erreur javascript dans prototype.

L’expérience est globalement positive, les temps de chargement sous firebug sont moins long qu’avant et dans Yslow wanarun passe de B à A sur le “Minify JS”

Note globale : D (62)

A suivre….

Première baisse

Voilà quelques semaines maintenant que je surveille  la progression du nombre de pages avec l’erreur. La première baisse vient d’apparaitre, nous sommes à 720 000 pages. Continuons la bataille !

Suite aux remarques que j’ai reçu a ce sujet, effectivement le chiffre n’est pas significatif car on peut voir dans les premieres pages quelques forums qui parle de l’erreur mais c’est tout à fait négligeable devant le nombre d’erreurs.

Je suis en train de faire un système de monitoring pour voir la progression au jour le jour et de facon automatique, le tout avec un petit ticker que vous pourrez afficher sur votre site.

Astuces rewrite….

Avant je ne faisais pas attention au moteur de recherche et a l’optimisation des pages. Mais c’est vrai que ca permet quand même de récupérer pas mal d’utilisateurs parfois. Voila le cas des parcours sur Wanarun.

avant j’avais des urls du genre :

http://www.wanarun.net/index.php?content=/view/parcours.php&parcours=2251

et j’ai décidé d’activer le mode rewrite pour obtenir ca :

http://www.wanarun.net/carte/2251/le-long-du-canal-thaon-les-vosges.html

Je ne vous cache pas que Google adore ce genre d’URL

Voila le code que j’ai mis dans mon fichier .htaccess :

RewriteEngine On
RewriteRule ^carte/([0-9]+)/(.*).html$ index.php?content=/view/parcours.php&parcours=$1

Ensuite pour rediriger proprement les anciennes pages j’ai ajouté ce code dans ma page

  1. if ($_SERVER["SCRIPT_NAME"]=="/index.php" && urlParcours($parc_d)!=$_SERVER["REDIRECT_URL"])
  2.     {
  3.       header('HTTP/1.1 301 Moved Permanently');
  4.       header("location: ".urlParcours($parc_d));
  5.       exit;
  6.     }
  7.  

ma fonction urlParcours renvoit l’url propre tout simplement.

PDT Eclipse

Après 1 an  et demi de développement, la plateforme  Eclipse pour le dévelopement PHP est disponible. Il va falloir que je regarde ca de plus près pour voir les avantages et les inconvénients. Qu’apporte t’il de plus que PHP Eclipse.
Pour ma part, j’utilise Jedit , il fonctionne sous windows, sous linu, sous Mac Os X et un peu customisé il est sympa a utiliser.

Pour mes développements, j’utilise un serveur sous linux pas besoin d’un machine très puissante avec une distribution Ubuntu. J’édite mes développements avec Jedit en SFTP et si besoin je synchronise mes fichiers sur le serveur de production avec Rsync

Rsync est une vrai merveille : je l’utilise pour mes mises en productions, mes backups,…

Dans le live Building Building Scalable Web Sites, il est question des environnements de développements. Utilisations de CVS ou Non ?…

Et vous, quels sont vos pratiques : environnement de developpement, mise en production, cvs… ?

mysql / mysqli / mysqlnd : les extensions PHP pour MySQL

Le couple PHP / MySQL est devenu inséparable depuis quelques années maintenant… Mais la vie de couple n’est pas toujours facile. Il existe 3 façons d’unir ce couple :

  • ext/mysql : l’extension mysql classique (old school) que nous avons tous utilisés
  • ext/mysqli : l’extension mysql “improved” (sous entendu amélioré) interface object / prepared statement et autres nouveautés

Mais voilà, le hic c’est les fameuses connexions persistentes, depuis toujours on a tous désactiver cette possibilité allant même jusqu’à oublier qu’elle existait.

Mais voila MySQL AB a décidé de prendre le taureau par les cornes et de développer une libriairie de remplacement pour résoudre ces problèmes. c’est chose faite avec mysqlnd (Mysql native driver). cette librairies remplace la librairie libmysql qui se trouve dans PHP et elle est écrit directement par les équipes de MySQL.

pour en savoir plus

A tester !

Livre retardé

Dans mon article sur “Règles pour de meilleurs performances”, je vous parlait du livre High Performance Web Sites, il devait sorti fin septembre et je viens de recevoir un email d’Amazo, qui m’annonce une sortie pour fin novembre…il va falloir patienter un peu…

En attendant, j’ai choisi de lire Building Scalable Web Sites

Un retour sur ce livre prochainement sur ce blog.

Subselect en MySQL attention !

Je suis un utilisateur de MySQL depuis quelques années déjà… et donc j’ai pris l’habitude de feinter certaines fonctionnalités. Par exemple, le Subselect apparu dans la version 4.1. Je profite donc de cet article pour vous dire de faire attention car un subselect c’est peut être plus facile a développer mais on peut faire mieux en terme de performance.

Sur Wanarun (je préfère prendre des exemples que je connais), je veux voir le nombre de personnes qui utilise la gestion des départs.

La version avec subselect :

  1. SELECT pseudo FROM fr_users WHERE userID IN (SELECT userID FROM mes_departs);
  2.  

temps : 0.08 sec

la version avec juste une jointure

  1. SELECT DISTINCT(pseudo) FROM mes_departs m,fr_users u WHERE u.userID=m.userID;
  2.  

temps : 0.00 sec

Donc faites bien attention ! De plus, la version avec sub select risque d’etre de plus en plus lente si la taille de votre base augmente.

Modification javascript pour les tables

Comme plusieurs d’entre vous veulent connaitre les modifications que j’ai fait pour les tableaux javascript (suite des commentaires sur l’article “Economisez votre serveur : Triez en javascript”

Pour rappel, la page d’exemple se trouve ici : la page des entrainements de MARC78 sur Wanarun

Les modifications de la librairies sortable.js
Ajout d’une variable pour la taille des pages

  1. var maxRows=20;

Ajout de la fonction showPageTable()

  1. function showPageTable(table,number)
  2. {
  3.   for (j=1;j
  4. <table.rows.length;j++)>{
  5.     if (j<maxrows*(number-1)>=(maxRows*(number)+1))
  6.     {
  7.       table.rows[j].style.display='none';
  8.     }
  9.     else
  10.     {
  11.       table.rows[j].style.display='';
  12.     }
  13.   }
  14. }
  15.  

Modification de sortables_init()

  1.  
  2. //après la ligne
  3. ts_makeSortable(thisTbl);
  4. //j'initiliase mon tableau sur la premiere page
  5. showPageTable(thisTbl,'1');

Dans le php

  1.  
  2. //il faut définir une variable commune avec le javascript
  3. define("NB_LIGNE_TABLEAU",20);
  4.  
  5. $list=$data["performance"];
  6. $page_str="";
  7. $separator=" | ";
  8. $nb_page=floor(sizeof($list)/NB_LIGNE_TABLEAU)+1;
  9. if ($nb_page&gt;1)
  10. {
  11.         for($i=1;$i&lt;=$nb_page;$i++)
  12.         {
  13.                 $page_str.="<a href="#" onclick="\"showPageTable($('unique_id'),'".$i."')\"">".$i."</a>";
  14.                 $page_str.=$separator;
  15.         }
  16.         echo substr($page_str,0,-strlen($separator));
  17. }
  18.  


Check out our best movie collection. Latest CD, DVD, HQ DVD movie downloads. Buy and download movies instantly.