Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 03-06-2009 12:24:32

DavidV
Membre
Date d'inscription: 19-05-2009
Messages: 19

[Bonne pratique] les entêtes, la compression, etc. (YSlow inside)

J'ai découvert YSlow il y a peu, et leurs page d'aide m'ont appris beaucoup de choses.
Je voudrais parler ici des entêtes donnés aux images, de la réduction du code Css et JavaScript, de la compression gzip, et du nombre de fichier JavaScript lié.

En résumé : Comment gérez-vous ces problématiques ?

Pour ma part :
J'utilise pour les images le principe décrit ici : http://www.fiftyfoureleven.com/weblog/w … zip-method
(la Method Two) pour ajouter un header "Expires" avec une date très lointaine sur les gif et autres PNG.
Donc en résumé un htaccess qui va ajouter les entêtes voulus à tous les fichiers du répertoire ayant les extensions choisies.

Concernant le JavaScript, j'utilise un helper qui stocke les fichiers à importé. Lorsque je suis en mode "development", le rendu du helper concatène l'ensemble des fichiers et enregistre le résultat. Il génère alors la balise script qui importera le fichier de script unique. J'utilise ensuite un controller "optimisation" action "css" pour compresser en Gzip et appliquer les entêtes voulus.

Concernant le Css, j'ai récupéré sur le net 2 expressions régulières pour supprimer les espaces et les commentaires, et j'utilise un controller "optimisation" action "Css" pour appliquer la transformation, compresser en Gzip et renvoyer le résultat avec les entêtes attendus.

Code:

//En gros
$this->headLink()->appendStylesheet($this->url(array('action' => 'css', 'controller' => 'optimisation', 'file' => 'css-global.css')))

//ce qui donnerai
//<link href="/optimisation/css/file/css-global.css" media="screen" rel="stylesheet" type="text/css" />

Je pense rapidement appliquer le même principe que pour le JavaScript : ne recalculer à chaque fois qu'en mode "development".

Enfin pour le site en lui même, je "capture" les sorties juste avant le dispatch et je compresse en Gzip le contenu buffer.

Tout ceci fonctionne assez bien, mais je trouve ça assez compliqué à mettre en place.
Vous-êtes vous posé ce genre de question ? Quelles réponses y avez-vous trouvés ?

Hors ligne

 

#2 03-06-2009 13:19:31

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [Bonne pratique] les entêtes, la compression, etc. (YSlow inside)

Apache sait tout faire très bien.
Les développeurs PHP oublient souvent qu'Apache est extrêmement puissant, et sait compresser le contenu et appliquer les en-têtes de cache nécessaires (Expires et Last-Modified notamment, extrêmement importants).

Pour le JS, les versions mini existent; pour le CSS soit tu le fait toi même, soit tu appliques un filtre qui le fait. L'utilisation d'une CDN peut aussi être très intéressante, surtout si il y a beaucoup de proxies dessus.
J'essaye d'éviter au maximum la lourdeur du modèle MVC. Ce n'est pas à PHP de proposer du JS ou du CSS compressé, mais à Apache, c'est tellement plus performant (ca va de l'ordre de x10 à x20 tout de même).

ExpiresActive On
ExpireDefault "access plus 1 month"
AddOutputFilterByType DEFLATE text/css application/x-javascript

Le module mod_cache_file peut aussi s'avérer très utile dans bien des cas.
PS : je suis en train d'écrire un article très grand sur HTTP, qui devrait intéresser pas mal de monde ^^

Hors ligne

 

#3 03-06-2009 13:42:37

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Bonne pratique] les entêtes, la compression, etc. (YSlow inside)

@DavidV :
C'est de toute façon assez long à mettre en place de façon propre. Sur des projets qui ont des problèmes de performance, j'utilise phing qui permet de "construire son projet" en une instruction.

En gros avant de déployer mon projet, je lance phing qui assure les tâches suivantes :
- minify les fichiers JS ensemble (avec YUI Compressor)
- minify les fichiers CSS (avec YUI Compressor)
- génère les phpdoc
- lance les tests de non-régression

Dans la pratique, je n'ai jamais mis tout en place sur un seul projet (jamais eu le budget pour), mais l'idée générale est de créer un "builder" qui fait toutes ces opérations en une commande simple.

Un des intérêts de compresser les JS et les CSS (à la place ou en plus de la compression apache) est que le navigateur lui même interprète beaucoup plus vite les fichiers et que le nombre de fichiers à charger est considérablement réduit.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#4 03-06-2009 17:33:08

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [Bonne pratique] les entêtes, la compression, etc. (YSlow inside)

Oui, Phing est une petite merveille en ce qui concerne l'automatisation de tâches (son but), en effet! ^^

Hors ligne

 

#5 03-06-2009 17:52:22

DavidV
Membre
Date d'inscription: 19-05-2009
Messages: 19

Re: [Bonne pratique] les entêtes, la compression, etc. (YSlow inside)

@Philippe : Merci pour le tuyau, je vais regarder du coté de phing alors.
@Julien : As-tu le sommaire de ton article ? Pour avoir une idée ^^

Hors ligne

 

#6 03-06-2009 18:32:50

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [Bonne pratique] les entêtes, la compression, etc. (YSlow inside)

@DavidV ; c'est presque un livre, rien que le sommaire prendrait 4 pages sur le forum... Il s'agit de l'explication détaillée, toutes RFCs sous la main, de tout HTTP, depuis ses débuts jusqu'à aujourd'hui.
Quel protocole passionnant ...

Hors ligne

 

#7 06-06-2009 17:54:41

mikaweb
Nouveau membre
Date d'inscription: 22-04-2009
Messages: 4

Re: [Bonne pratique] les entêtes, la compression, etc. (YSlow inside)

Petite question de ma part, un petit peu éloignée du sujet mais pas tant que sa je pense.

J'ai une petite classe qui me sert à protéger ou plutôt à nettoyer les données insérées dans les "input" à travers les variables globales telles que GET, POST, COOKIES, etc..
En gros dans cette classe, je teste si les magic quotes ainsi que register globals sont activés, si c'est le cas, je log tout cela pour en être averti, vu que c'est destiné à tourner sur X serveurs différents, c'est toujours bon à savoir.

Si c'est activé ben je fais en sorte d'anhiler leurs effets.

Est-ce que Zend Framework tient compte de tout cela ou est-ce que je peux - dois - utiliser ma librairie ?
De toute manière ce n'est qu'un petit fichier de 7ko à rajouter, pas la mère à boire mais bon si on peut faire une petite économie la-dessus.
Puis sa me permet d'avoir un bon contrôle dessus si c'est activé, je peux mettre à OFF, si c'est possible bien sûr, bien que je le fasse déjà via le .htaccess, je suis pas sûr à 100% que cela suffise avec.

Merci beaucoup.

Dernière modification par mikaweb (06-06-2009 17:56:58)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages