Optimisation : page en cache et css/js minifié/concaténé/compressé
Yannou90
Member
Bonjours à tous
Je suis "hébergé" :rolleyes: chez free.fr avec pluxml en version 5.1.6 , theme theme-piano-black2
Je souhaite , de façon ludique , optimiser mon blog au maximum .
Pour celà j'ai pas mal modifier le theme que j'utilise et passe maintenant la validation xhtml strict 1.0 , css3 ...
Les débits chez free sont catastrophiques et completement alléatoire , je ne parle pas du ftp qui est encore pire !
Apres quelques recherche , j'ai trouvé des piste pour optimiser le site sans droit d'administration !
Tout d'abord , forcer la mise en cache des page :
Éditez le fichier header.php de votre theme et sous la ligne:
Réponse du serveur lors du chargement d'une page :
Je ne suis pas l'auteur de ce bout de code , je l'ai remanié à partir de différents articles parsemé sur le net .
La c'est bon , le cache fonctionne parfaitement pour moi , testé avec redbot et confirmé avec firebug et Yslow .
Pour Yslow j'ai un score entre 75 et 80 , c'est pas trop mal .
Le top serait de pouvoir minifier/concaténer/compresser les css et js.
Beaucoup d'outils existe , je pourrais également modifier mon header.php et manuellement effectuer les changements.
Mais avec le systeme de plugin ce n'est pas possible !
J'ai découvert php_speedy qui permet de modifier à la volé le contenu des pages . Ce script minifi/concatene et compresse tout css et js présent sur une page limitant ainsi le nombre de requete et le poid des fichier .
Çà fonctionne du feu de dieu sur des script php , mais avec pluxml je patauge .
Je m'explique :
-téléchargement de la derniere version du script : php_speedy_wp_0.5.2.zip
-décompression et reccupération du dossier php_speedy présent dans php_speedy_wp/libs/php_speedy
-suppression des fichier install.php et index.php ( utile uniquement pour une configuration graphique)
-édition de config.php :
Maintenant pour l'utiliser il suffit d'ajouter 2 ligne de code : une au dessus du header et l'autre au dessous du footer , pour moi :
Si j'ajoute :
Ou pourrais-je bien placer ces bouts de codes ??
Je suis "hébergé" :rolleyes: chez free.fr avec pluxml en version 5.1.6 , theme theme-piano-black2
Je souhaite , de façon ludique , optimiser mon blog au maximum .
Pour celà j'ai pas mal modifier le theme que j'utilise et passe maintenant la validation xhtml strict 1.0 , css3 ...
Les débits chez free sont catastrophiques et completement alléatoire , je ne parle pas du ftp qui est encore pire !
Apres quelques recherche , j'ai trouvé des piste pour optimiser le site sans droit d'administration !
Tout d'abord , forcer la mise en cache des page :
Éditez le fichier header.php de votre theme et sous la ligne:
<?php if(!defined('PLX_ROOT')) exit; ?>
Ajouter :
<?php
$lastModified=filemtime(__FILE__);
$etagFile = md5_file(__FILE__);
$etag = dechex(fileinode(__FILE__));
$etag.= "-".dechex(filesize(__FILE__));
$etag.= "-".dechex(((filemtime(__FILE__).str_repeat("0",6)+0) & (8589934591)));
$ifModifiedSince=(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false);
$etagHeader=(isset($_SERVER['HTTP_IF_NONE_MATCH']) ? trim($_SERVER['HTTP_IF_NONE_MATCH']) : false);
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $lastModified)." GMT");
header("Etag: W/\"$etag\"");
header('Cache-Control: public');
header("Vary: Accept-Encoding");
if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])==$lastModified || $etagHeader == $etagFile)
{
header("HTTP/1.1 304 Not Modified");
exit;
}
?>
Les pages apparraissent alors comme étant statique , la mise en cache est alors mis en oeuvre !Réponse du serveur lors du chargement d'une page :
HTTP/1.1 200 OK
Date: Sun, 17 Mar 2013 13:10:17 GMT
Server: Apache/ProXad [Apr 20 2012 15:06:05]
Cache-Control: public
Content-Encoding: gzip
Etag: W/"6a238bd-1736-3a258ac0"
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Vary: Accept-Encoding
X-Powered-By: PHP/5.1.3RC4-dev
Set-Cookie: PHPSESSID=d59cb54b7f91f1e0a64d8317e923919f; path=/
Last-Modified: Sun, 17 Mar 2013 12:44:03 GMT
Connection: close
Content-Type: text/html; charset=UTF-8
Et un joli 304 lors du rechargement Je ne suis pas l'auteur de ce bout de code , je l'ai remanié à partir de différents articles parsemé sur le net .
La c'est bon , le cache fonctionne parfaitement pour moi , testé avec redbot et confirmé avec firebug et Yslow .
Pour Yslow j'ai un score entre 75 et 80 , c'est pas trop mal .
Le top serait de pouvoir minifier/concaténer/compresser les css et js.
Beaucoup d'outils existe , je pourrais également modifier mon header.php et manuellement effectuer les changements.
Mais avec le systeme de plugin ce n'est pas possible !
J'ai découvert php_speedy qui permet de modifier à la volé le contenu des pages . Ce script minifi/concatene et compresse tout css et js présent sur une page limitant ainsi le nombre de requete et le poid des fichier .
Çà fonctionne du feu de dieu sur des script php , mais avec pluxml je patauge .
Je m'explique :
-téléchargement de la derniere version du script : php_speedy_wp_0.5.2.zip
-décompression et reccupération du dossier php_speedy présent dans php_speedy_wp/libs/php_speedy
-suppression des fichier install.php et index.php ( utile uniquement pour une configuration graphique)
-édition de config.php :
<?php
#########################################
## Compressor option file ##############
#########################################
## Access control
$compress_options['username'] = "";
$compress_options['password'] = "";
## Path info
$compress_options['javascript_cachedir'] = "/var/www/pluxml/Dev.Yannou90/php_speedy/cache";
$compress_options['css_cachedir'] = "/var/www/pluxml/Dev.Yannou90/php_speedy/cache";
## Comma separated list of JS Libraries to include
$compress_options['js_libraries'] = "";
## Ignore list
$compress_options['ignore_list'] = "";
## Minify options
$compress_options['minify']['javascript'] = "1";
$compress_options['minify']['page'] = "1";
$compress_options['minify']['css'] = "1";
## Gzip options
$compress_options['gzip']['javascript'] = "1";
$compress_options['gzip']['page'] = "1";
$compress_options['gzip']['css'] = "1";
## Versioning
$compress_options['far_future_expires']['javascript'] = "1";
$compress_options['far_future_expires']['css'] = "1";
## On or off
$compress_options['active'] = "1";
## Display a link back to PHP Speedy
$compress_options['footer']['text'] = "0";
$compress_options['footer']['image'] = "0";
## Should Speedy Clean Up the cache directory?
$compress_options['cleanup']['on'] = "0";
## Should Speedy use data URIs for background images?
$compress_options['data_uris']['on'] = "0";
#########################################
?>
-test du fichier test inclu OKMaintenant pour l'utiliser il suffit d'ajouter 2 ligne de code : une au dessus du header et l'autre au dessous du footer , pour moi :
<?php
if(empty($_GET['compress']) || $_GET['compress'] != "no") {
require(/var/www/pluxml/Dev.Yannou90/php_speedy/'');
}
?>
< ... header ...
......................
... footer ...>
<?php
if(empty($_GET['compress']) || $_GET['compress'] != "no") {
$compressor->finish();
}
?>
Sur des fichier "custom" cela fonctionne tres bien mais avec pluxml ce n'est pas possible !Si j'ajoute :
<?php
if(empty($_GET['compress']) || $_GET['compress'] != "no") {
require(/var/www/pluxml/Dev.Yannou90/php_speedy/'');
}
?>
A mon header.php , et :
<?php
if(empty($_GET['compress']) || $_GET['compress'] != "no") {
require(/var/www/pluxml/Dev.Yannou90/php_speedy/'');
}
?>
Au footer cela ne fonctionne pas :
PHP Fatal error: Cannot redeclare loadLang()
En éditant index.php :
PHP Fatal error: Call to a member function finish() on a non-object
Au choix , les deux abbotissant à une erreur 500Ou pourrais-je bien placer ces bouts de codes ??
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'ai parcouru en long en large et en travers le fichier index.php , j'ai bien remarqué la bufferisation avec ob_start() , la reccuperation avec $output = ob_get_clean() , les inclusions des plugins et le traitement sur $output
Le soucis et que avant de faire un plugin , il faudrait peut-etre que je sache quel outil je dois employé ??
Je suis sur le coup ...
- The Tool Box
- Minify Css
Et le plus important les images PNG et JPEG :
- Jpegmini
- PngOptimzer
J'arrive à une note de 94 avec page speed, je ne suis pas trop fan des script direct dans le code.
Ce n'est pas vraiment de la sur-optimisation , mais plutôt une façon d'apprendre à optimiser .
Je suis pro open source et fan de *nix , j'ai un serveur perso chez moi que je sais "optimiser" , mais en tand qu'administrateur .
Je remercie free pour leur sites perso , celà me permet d'avoir sans trop de soucis un site dédié à un blog spécifique .Chez free toucher au htaccess et un peu difficile , les versions d'apache et de php ne sont pas du tout "normal" : ou rien ne se passe sans erreur ou tout plante !
Je suis autodidacte , et souhaite apprendre .Mon langage de predilection est le shell scripting ( bash ) avec lequel je fais ce que je veux et plus encore mais le php je ne m'y suis pas encore mis !
J'ai optimisé mon blog avec des outils tel que minify et autre , j'ai trouvé çà tres interressant et souhaitais faire un petit plugin pour "automatiser" tout çà .
Le truc ici c'est que ces outils "obligent" l'utilisateur à manuellement modifier le code de leur theme .
Pas tres grave en soit ni bien difficile , mais avec pluxml , l'activation de certains plugins injecte des lignes dans le code source de la page , et là il n'est pas possible d'utiliser ces outils , à moin de modifier les fichiers injecter !
Tout ceci pour arrivé à php_speedy . Des plugins existent pour Joomla , Drupal et Wordpress , et pourquoi pas Pluxml ?!
Franchement je serais content d'avoir un 100% avec Yslow mais dans le fond je m'en ...J'ai une note de 74 , constate ce qu'il faudrait pour optimiser çà et souhaite le mettre en place .
Pour revenir à pluxml , ce n'est pas tres intelligent de ma part de modifier le finchier "index.php" , mais vu le fonctionnement de pluxml , je ne vois pas comment je pourrais ajouter deux lignes de code sur une page formatée .
Je souhaite deja faire fonctionner le script sur pluxml , puis essayer de le permettre au plus grands nombre . Pour le coup c'est raté !
Apparement , pour ce fichier :
-on demarre la bufferisation
-on charge le theme
-créé la reponse du serveur ( header (..)) dans l'entête
-on injecte les plugins avant "</head>" et </body>
-on applique l'urlrewriting
-on compresse si besoin
-on arrete et affiche le resultat
Si je souhaite executer php_speedy je dois le faire une fois que la page est formaté donc sur "$output" , je dois donc travailler pour ajouter les lignes de code php sur $output et reinterpreter la page , donc travailler avec :
-ob_start(); pour ne pas afficher la page tand que la page n'est pas reformatée
-ob_get_clean() por reccupérer cet affichage et travailer dessus
Çà serait plus simple pour moi en bash , mais je trouverais ...
Et ce que je ne comprends vraiment pas c'est pourquoi j'ai cette erreur sur la sortie de ce script puisque la page index.php fini sur exit ??
L'astuce est que le fichier /var/www/pluxml/Dev.Yannou90/php_speedy/php_speedy.php require lui aussi d'autres fichiers , lignes 55 à 60 : On voit pourquoi j'ai cette satanée erreur : les fichiers sont relatif au repertoire d'installation de php_speedy , il suffit de renseigner les chemin absolu : Bon , je vais pouvoir approfondir la chose ...
J'ai donc fait un script bash (ouai , je peux en placer un :cool: ) , je vous presente la bete :
Les prerequis : bash et base64 , pour "dos" ben je ne peux rien ]:D.
Pour l'exemple j'utilise le theme theme-piano-black-2 , ce dossier contient un dossier "img" qui est dedié aux images :
-Avant : -Apres :
Je vous conseil de faire une sauvegarde de votre theme avant toute manipulation et de tester dans un environnement de developpement !!
Le script ce charge de trouver les images , de reconnaitre le mime-type , d'encoder en base64 sur une ligne , et de remplacer les liens du css pointant vers les images par le code produit .
Avec ce systeme , couplé au pseudo cache expliqué plus haut et speedy_php , je passe d'une 50 de requete ( css + image ) à 1 .
Voilou :P
pour eviter de mettre en dur le chemin absolu voilà un bonne syntaxe qui marchera à chaque fois
le réferencement ce fait à partir du script d'appel
à toi d'adapter après pour accéder jusqu'au fichier, par exemple
Consultant PluXml
Ancien responsable du projet (2010 à 2018)
-les pages sont 100% en cache -> chargement ultra-rapide
-css/js -> minifié/concaténé/compressé automatiquement
Je bosse sur un plugin , des qu'il est pret , du moin pour des tests , je vous le fais passer
Un lien sur "Show Slow pour voir les performances : http://www.showslow.com/details/7213967/http://dev.yannou90.free.fr/
Consultant PluXml
Ancien responsable du projet (2010 à 2018)
Juste une petite remarque est ce que tu as fait des tests sur les commentaires ?
Je m'explique : Comme pluxml utilise la session afficher les message "Commentaire ajouté ..." si ton plugin met toute la page en cache à ce moment là (et que le cache est partagé entre les visiteurs). Il se pourrait bien que les autres visiteurs voient eux aussi le message
J'essais avant tout de respecter certains standards , et optimiser ce que je peux comme je le peux !
J'ai un serveur perso et il y a beaucoup d'optimisations possible en tand qu' admin .
Mon blog tourne chez free , pas beaucoup d'article pour le moment , je souhaite déjà avoir une identitée graphique qui me serait propre , çà m'oblige à en apprendre un peut plus , j'adore comprendre !
Pour le cache , ce n'est pas un cache serveur en dur , c'est juste le "header" de la requette qui est imposé , celà permet une mise en cache forcée du navigateur et permet artifficiellement de ne pas avoir à re-télécharger l'enssemble des fichier .
En gros quand tu navigue sur mon blog , a chaque acces à une page , la page est mise en cache "navigateur" , si tu repasse sur la page tu te prend un 304 , le navigateur recharge son cache et ne telecharge pas une nouvelle fois la page : gain de bande passante , chargement et affichage plus rapide .
Du coup les pages restes dynamique (php) , le contenu est affiché correctement et mis à jour .
À moin d'avoir un cache démesuré , de ne jamais le vider et de passer sa vie sur le même blog , il n'y a pas de probleme , pluxml fonctionne comme à son habitude !
Je fais des testes pour implementer un vrais systeme de cache en dur sur serveur , çà n'ameliore pas le temps de chargement mais limites les ressources serveurs ( cpu , mem ,...) , la on gagne en temps de réponses et oui on peut avoir des resultat inatendu : contenu non mis a jour ...
Une piste : ne pas mettre en cache "dur" la page d'acceuil , et tout roule
Pour ce qui est du cache cotés serveur, j'ai longtemps utilisé un système basé sur du cache html basé sur les tampons de sorties ... Maintenant que j'ai mon serveur j'utilise un reverse proxy et à part le petit détail de la session ça poutre
Je penses m'y prendre comme une bille mais mon p'tit cerveau n'en peut plus : Edit : oublié IndexEnd , pas d'erreur dans les logs mais plus d'affichage , ici le code source en sortie :
Toutes lignes du genre
faut les utiliser en affectant à une variable.
soit une variable locale à la fonction:
soit à une variable de la classe BoostMyPlux
getParam permet de récupérer la valeur d'un paramètre dans le fichier xml des parametres du plugin
Consultant PluXml
Ancien responsable du projet (2010 à 2018)
Consultant PluXml
Ancien responsable du projet (2010 à 2018)
les valeurs ne seront donc pas accessible à partir de IndexEnd
il faut que tu fasses
attention à la syntaxe ' et " pour l'injection du code
Consultant PluXml
Ancien responsable du projet (2010 à 2018)
Je suis repartie de zero et respecté un peu plus le déroulement "normal" de php_speedy qui est
1) inclure au debut du traitement de la page le script php_speedy
2)inclure en fin de page un appel a la class compressor
Bon , le plugin ( en parti) : Çà çà marche si j'appelle le "vrais" script php_speedy , mais , forcement ce serait tellement simple que je ne passe pas des jours comme un dingues entre la doc php et pluxml , mais le scrip php_speedy requiére son fichier de config , qui comme par hasard s'appel config.php! :mad:
Il est de la forme suivante : J'ai modifié son nom en speedy_config.php pour laisser le config.php dédié a la configuration du plugin , bref ...
Je n'arrive pas mais pas du tout a lire les parametre de parametre.xml depuis ce satané fichier qui me rends chevre !
mon fichier parametre.xml : Et mon pseudo speedy_config.php qui ce doit de remplacer l'original mais qui ne peut pas fonctionner comme çà: Çà va en faire rire plus d'un , je le sens bien mais la çà fait 15 jour que j'essaies comme je peux et je n'y arrive pas , j'ai parcouru tout les plugins que j'ai , la doc de pluxml (pdf) , la doc de php , je sais plus quoi faire a part eclater mon portable , ce qui ne resoud rien !
Ma question :
comment créer ce fichier de config , qui lit les parametre depui parametre.xml et qui me le traduit sous la meme forme que l'original ???? 8.( 8.( 8.(
1)Recuperer php_speedy ici
2)Décompresser l'archive à la racine du site
3)Editer php_speedy.php aux lignes 55,56,57,60,70 en renseignant l'adresse absolu du chemin vers les scripts , c'est là ou je bloque , quelque soit la methode que j'ai employé , php_speedy ne trouvait pas le bon le bon chemin !
4)Editer config.php aux lignes 9 et 10 en renseignant l'adresse absolu du chemin vers les dossiers , pareils , lamentablement echoué pour trouver le moyen de lui faire manger correctement ( vraiment honte 8.( )
5)Recupérer le pseudo plugin ( encore plus honte 8.( ) ici le decompresser dans le dossier plugins et l'activé ( pfff tu parle )
J'ai remplacé jsmin.php par la derniere version existante , plus efficace et moin gourmand mais abandonné .
Chez free si vous activé le "minify js" vous pouvez tomber sur une erreur dans ce cas le desactivé (pas asser de memoire alloué à php) .
Pour "uri data" si votre theme contient deja ce type d'image encodé en base64 et embarqué dans les css , il se peut que le script ne le reconnaisse pas et le reencode comme une url , du coup on perd l'image , dans ce cas precis desactiver l'encodage .
Suivant la version du navigateur c'est un css en base64 qui est proposé , ou non
Aucun fichiers n'est reellement modifié , vous pouvez toujours éditer les css , changer les image , ajouter des scripts , tout est automatique et réversible , il suffit de desactiver le plugin ( ahah la bonne blague ) .
La faut que je lache la pression , je sais d'ou vient le soucis : libs/php/view.php qui permet de definir les path absolu pour php_speedy , mais le soucis est :
1)Comment definir exactement ces $path : /var/www/... et pas /home/roger/...
2)Creer ce satané fichier de config
Bref , je repose mes neuronnes et m'y remet dès que j'ai les infos nécessaires , là je craque , php je n'y connait vraiment rien , j'apprend mais là çà fait beaucoup .
Je precise que c'est extremement efficace je suis passe de 75 requete à 7 (et encore endesactivant google analityc je passe à 4) .
La solution du header modifier , je pensais l'inclure dans le plugin , mais je souhaitais deja faire fonctionner la bete , enfin voila , une bonne biere et çà iras mieux !
Santé !!
Enlève /var/www/pluxml/Dev.Yannou90/php_speedy/ dans chaque require.
De même dans le fichier config.php
Je vais devenir chevre
Je refais mon pactage et poste le resultat !!
Desole je n'avais pas vu ton post
C'est les seul chemin qui fonctionne chez moi !
la je vien de retester en mettatnt les fichier d'origine de php_speedy et en lançant l'installation , il me trouve ces chemins là !
De plus je sui obligé de manuellement editer php_speedy.php et de lui mettre le meme chemin , depuis document root (/var/www/...) sinon mon plux me charge config.php de la racine du site plutot que celui du dossier php_speedy ,
je n'ai fait que des testes en local et pas sur free.fr , en local je n'ai pas le choix , mon sites free tourne avec un le plugin (pfffff) et php_speedy a la racine .
En local j'ai un virtualhost c'est peut etre pour cela que je galere comme ca , çà et un vieux chmod !
[/del]
La première chose à faire est de forcer les pages à être mises en cache. Il faut donc mettre, comme tu l'as dit, dans le fichier header du thème, à la place de le code suivant :
Ensuite, il suffit d'activer le plugin dans la page d'admin.
Ps : si vous testez le site en local et que vous le copiez tel quel sur votre serveur de prod ça ne marchera pas. Il faudra supprimer le fichier de paramétrage situé, pour la version 5.1.6, dans le dossier du plugin (parametres.xml) ou pour la 5.1.7, dans le dossier data/configuration/plugins (BoostMyPlux.xml).
Il faudra également supprimer le fichier situé dans le cache du plugin (plugins/BoostMyPlux/php_speedy/cache/unnomarallonge.php).
Dernier point : il faudra désactiver puis réactiver le plugin.
EDIT IMPORTANT : J'ai oublié de remettre à zéro la compression gzip dans la configuration du plugin. Le temps que je mette l'archive à jour, il faut modifier la ligne 23 du fichier plugins/BoostMyPlux/php_speedy/config/config.php et mettre le paramètre à 0
Enjoy
Désormais, il n'est plus nécessaire d'écrire tout le code
A la place, dans le fichier header.php de votre thème, après la ligne appelez le hook suivant
La minification du javascript fonctionne mais peut demander beaucoup de ressources en fonction du projet. Elle est donc désactivée par défaut. A vous de voir si vous souhaitez la réactiver.
Je viens de créer un topic dans la section plugins pour suivre plus facilement le projet.
Ps : si vous testez le site en local et que vous le copiez tel quel sur votre serveur de prod ça ne marchera pas. Il faudra supprimer le fichier de paramétrage situé, pour la version 5.1.6, dans le dossier du plugin (parametres.xml) ou pour la 5.1.7, dans le dossier data/configuration/plugins (BoostMyPlux.xml).
Il faudra également supprimer le fichier situé dans le cache du plugin (plugins/BoostMyPlux/php_speedy/cache/unnomarallonge.php).
Dernier point : il faudra désactiver puis réactiver le plugin.
Enjoy.