Posts Tagged ‘ Performances

cufòn: Intégration de polices non standards sans CSS 3 ou Internet Explorer

Depuis quelques temps, je m’intéressais à une façon intéressante d’intégrer des polices de caractères non standard dans un site web sans utiliser CSS3 ou Internet Explorer. Je cherchais une solution légère et multi plateforme.

J’ai d’abord été amené à utilise sIFR, qui est une solution intéressante mais elle n’est pas très légère. En effet le principe de fonctionnement est le suivant, un fichier SWF contenant un champ texte est utilisé après y avoir intégré une police et les caractères souhaités. Un sélecteur CSS est ensuite utilisé pour récupérer la liste d’éléments à transformer, sur chacun de ces éléments un flash est affiché en y injectant le texte, le lien et plusieurs autres paramètres (couleur, graisse, …).

Le résultat obtenu est assez intéressant mais dès qu’il y a beaucoup d’éléments à remplacer avec plusieurs types de polices, les pages générées deviennent vite lourdes à manipuler par un navigateur (la machine virtuelle flash n’est pas reconnue pour sa légèreté… ;) ).

N’étant pas pleinement satisfait pas cette solution, j’ai continué de chercher et des collègues m’ont fait part d’une technologie qu’ils avaient trouvés, cufòn. Cet outil fonctionne sur le même principe de remplacement par sélecteur CSS d’items HTML mais la manipulation de police est différente (son principe de fonctionnement est défini ici).

En effet, des fichiers JavaScript sont générés à partir des fichiers de polices (TTF, OTF, PFB, PostScript) permettant à la librairie de réécrire au format vectoriel (VML) les textes sélectionnés. Pour les navigateurs compatibles HTML5 (FireFox 3.5+, Opera, Safari 4+, Chrome, …), la balise Canvas est utilisée pour faire le rendu. Pour les autres navigateurs, soit le format vectoriel SVG est utilisé pour dessiner un caractère ou un groupe de caractère soit le format VML, ce dernier étant directement supporté par Internet Explorer. Le respect de ces différentes normes permet de rendre cufòn compatible avec la majorité des navigateurs du marché (si ce n’est tous…) et non dépendant d’un plugin externe (le rendu reste figé pour tous les internautes).

Une interface web appelée « Generator » permet, après upload des fichiers de polices de caractères, de générer le fichier JavaScript à utiliser pour afficher les textes sur le site. A travers cet interface l’utilisateur peut choisir:

  • d’inclure les polices en bold, italic, bold italic, regular
  • spécifier le nom de la police dans le fichier
  • définir quels caractères doivent être inclus dans le JavaScript (tous, nombre, ponctuation, latin, cyrillique, …)
  • possibilité de rajouter des caractères « en dur » pour agrémenter la police
  • verrouiller l’utilisation de la police sur un domaine particulier (pour gérer les droits de diffusion)

Voici un exemple d’utilisation de cufòn pour remplacer toutes les balises H1 par leurs équivalents dans la police « Champagne & Limousines »:

<head>
    ...
    <!-- JS FILE LOADING -->
    <script src="js/cufon-yui.js" type="text/javascript"></script>
    <script src="js/Champagne__Limousine_700.font.js" type="text/javascript"></script>
    <!-- END JS FILE LOADING -->
    ...
</head>
<body>
    <h1>TEXTE A REMPLACER</h1>
    <script  type="text/javascript">
        Cufon.replace('h1');
        Cufon.now();
    </script>
</body>

Faites moi savoir si cette technologie vous a été utile :) !

PHPUnit et le développement piloté par les tests

J’ai récemment trouvé deux articles en épurant mes différents abonnements RSS de cette fin d’année qui présentent l’utilisation de PHPUnit.

Cet outil permet de mettre en place des tests unitaires pour PHP de la même façon que JUnit pour Java. Ces tests, une fois développés permettent de garantir le fonctionnement de tout le code après chaque modification. En effet, ils sont écrits suite aux spécifications fonctionnelles et technique du produit et décrivent précisément tous les comportements attendus des objets PHP. Ils sont ensuite exécutés à chaque commit sur le système de versioning ou part un système d’intégration continu (Cruise Control, Trac Bitten, Hudson, …)

Ce genre de technique ne peut être mis en place que lorsque le développement est réalisé dans un cadre strict de génie logiciel (Design Patterns, Single Responsability, Interface Segregation, …). Julien Pauli, contributeur sur le site Développez.com a récemment écrit deux articles sur le sujet.

Le premier présente le concept de tests unitaires et son implémentation à travers PHPUnit, il est disponible à l’adresse http://julien-pauli.developpez.com/tutoriels/php/phpunit-tdd/. Il est très complet et m’a permis de bien appréhender l’utilité de ces tests pour la fiabilisation des applications web.

Le second est séparé en deux parties. Une introduction bien détaillée, expliquant les principes élémentaires du développement objet et du principe SOLID (ca ne fait jamais de mal de se refaire une petite lecture dessus). La deuxième partie est un exemple concret de mise en place de scripts de tests PHPUnit sur la fonctionnalité panier d’un site marchand. Cet article est disponible à l’adresse : http://julien-pauli.developpez.com/tutoriels/php/phpunit-avance/

Si comme moi vous êtes en quête d’amélioration de vos développements (utilisation du debugger xdebug, mise en place de tests unitaires, …), je vous conseille vivement la lecture de ces deux articles!

Un composant pour compresser les fichiers JS et CSS

Etant toujours en quête de l’allègement des pages web, j’ai récemment trouvé un outil permettant de compresser les codes JavaScript et CSS. Cette librairie appelée « Minify » est hébergée sur Google Code par Steve Clay et Ryan Grove et est basé sur JSMin, programme développé par Douglas Crockford en C.

Plusieurs classes PHP permettent de compresser les fichiers JS, ou les fichiers CSS assez simplement.
Pour ma part, je vais coupler l’utilisation de ce code avec Phing pour alléger le poids des fichiers à transférer lors de l’affichage des pages web que j’aurais créé. Dans un futur post, je présenterais différents processus Phing dont celui-ci…

Plusieurs exemples d’utilisation sont disponibles pour une meilleure compression en fonction de plusieurs cas concret. Ils sont décrit à l’adresse http://code.google.com/p/minify/wiki/CookBook.

Vous trouverez les sources (sous licence BSD) à l’adresse suivante: http://code.google.com/p/minify/

TinySlider: Un diaporama JavaScript dégradable sans FrameWork

J’ai récemment découvert ce script permettant d’implémenter un diaporama multi contenus (texte, images, …) sans FrameWork.

Sa légéreté (1,5Ko) en fait un outil intéressant pour être intégré rapidement sans contraintes. Il est paramétrable (navigation précédent / suivant, pagination, défilement automatique, …) et peu être retravaillé graphiquement très facilement.

En dehors de ces avantages, TinySlider permet surtout un affichage propre du contenu quand JavaScript est désactivé (voir la démonstration). L’auteur a apporté un soin particulier à respecter cette compatibilité qui est souvent trop oublié par les développeurs JavaScript. Les moteurs de recherche ne voient pas la page avec JavaScript, il est donc important de leur afficher un contenu approprié.

Vous pourrez trouver une présentation du script à l’adresse: http://www.leigeber.com/2009/12/slideshow-script/

Créer des Sprites CSS… Une idée pour alléger le chargement de vos pages web!

A travers de récentes recherches sur les possibilités de tester et d’améliorer les temps de chargement de mes pages web, j’ai découvert une présentation intéressante sur la création de Sprite CSS.

En effet cette technique consiste à regrouper plusieurs images d’interfaces à l’intérieur d’un Sprite comme présenté dans l’exemple ci-dessous réalisé par Google :

Exemple de sprite utilisé par Google sur son site

Il suffit ensuite d’utiliser les propriétés CSS de « background-img » et « background-position » pour pouvoir afficher la partie souhaité de l’image.

Les images chargées à travers CSS ne sont chargés qu’une fois alors que les images insérées en HTML sont chargées autant de fois que nécessaire. L’utilisation de Sprite permet donc de réduire considérablement le temps de chargement des interfaces car c’est ici leur principale utilité.

Vous trouverez l’article à l’adresse http://cssglobe.developpez.com/tutoriels/css/ameliorer-temps-chargement-images/#LI.

Il permet de bien se rappeler comment son calculées les coordonnées de position des images de fond CSS et sert de guide pour ne pas rater une étape dans la mise en place des Sprites.