Votre avis pour améliorer la note PageSpeed/Yslow -
bess - 23/03/2011
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: #1.9.2
#~ Url du site : cmsmadesimple.fr
#~ Hébergeur / Soft : o2switch
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Salut tout le monde
Toujours dans ma recherche d'améliorer les services sur mes sites web (et principalement cmsmadesimple.fr) j'ai eu l'idée d'utiliser un second nom de domaine pour gérer une partie des données static en dehors du ndd cmsmadesimple.fr
[h]Pourquoi ?[/h]
Par ce qu'un navigateur ne lance que 10 connexions / domaine en simultané ce qui ralentit considérablement le temps de traitement de l'ensemble des éléments d'un site
Par ce qu'externaliser les images sur un ndd différent peut permettre également de supprimer les cookies associés
Par ce qu'une fois la gestion réussite d'un tel procédé, passer à un CDN sera rapide, ce qui n'est pas non plus négligeable en terme de perf pure.
sources :
http://gtmetrix.com/use-a-content-delivery-network-cdn.html
http://gtmetrix.com/use-cookie-free-domains.html
http://gtmetrix.com/parallelize-downloads-across-hostnames.html
Alors ma question : comment procéder dans CmsMadeSimple pour que (par exemple)
* tout ce qui se trouve dans /tmp soit préfixé par, non pas le ndd cmsmadesimple.fr, mais par static1.autrendd.tdl
* tout ce qui se trouve dans /uploads soit également préfixé par static2.autrendd.tdl
Est ce que quelqu'un a déjà travaillé la question ?
Je n'ai pas encore bien cherché de solution, c'est plus une idée qui me passe par la tête. Si des personnes savent ou sont intéressés par une solution qu'ils restent dans le coin.
Si mes recherches donnent rien je me pencherais vers l'écriture d'une balise utilisateur qui utilisera les évènements pour modifier en dur le rendu de la compilation par smarty je penses...
Votre avis pour améliorer la note PageSpeed/Yslow -
bess - 23/03/2011
En fait ce sera peut être plus simple que je ne le craignais...
je vais tenter ceci.
Dans le config.php ajouter
Code :
$config['cdn_url'] = 'http://subdomaine.ndd.tld';
et modifier ces lignes
Code :
$config['uploads_url'] = $config['cdn_url'] . '/uploads'
$config['image_uploads_url'] = $config['cdn_url'] . '/uploads/images';
ca devrait marcher assez facilement... mais ne résoudra pas tout. (utilisation d'un vrai cdn par exemple)
Votre avis pour améliorer la note PageSpeed/Yslow -
jissey - 23/03/2011
oui, moi ça m'intéresse, je reste dans le coin.
J'avais eu cette idée pour un autre besoin: mutualiser les ressources.
Dans mes cours, les stagiaires font un TP sur le même sujet et je voulais mettre les ressources (PDF, images) sur un serveur pour tout le monde.
C'est resté à l'état d'idée, la même que toi dans le fichier de config, mais manque de temps pour mettre en oeuvre.
Si besoin de test, tu sonnes (pas trop fort!)
[edith]ça yest, ça me revient: pour $config['image_uploads_url'] pas de problème, mais pour $config['image_uploads_path'] problème;[/edith]
Votre avis pour améliorer la note PageSpeed/Yslow -
bess - 23/03/2011
oui le path peut pas être modifié sans que ca foute la merde dans l'admin j'imagine...
On peut contourner le problème je pense en gérant depuis l'admin les fichiers comme d'habitudes avant de faire appel à une UDT qui ouvrirait une connexion FTP sur un site externe, copie/colle la structure de /uploads et ferme la connexion
Du coup $config['image_uploads_url'] peut pointer sur n'importe quel support physique différent de ton hébergement sur lequel tu travail
Cette méthode archaïque permet de faire fonctionner :
* static.ndd.tdl/uploads pointant vers le même répertoire que
www.ndd.tdl/uploads
* static.ndd.tdl/uploads pointant vers un autre répertoire, un autre serveur
* static.ndd.tdl/uploads pointant vers un vrai cdn
Encore que pour le cdn je ne connais pas assez le système... mais l'idée reste intéressante pour un confirmé de Cmsms.
débutant s'abstenir par contre
Votre avis pour améliorer la note PageSpeed/Yslow -
jissey - 23/03/2011
Faudrait voir à quelles occasions est utilisé image_uploads_path et voir si on ne peut pas ouvrir un socket dessus : fsocken...
Votre avis pour améliorer la note PageSpeed/Yslow -
kraygoon - 23/03/2011
Discussion très intéressante. Perso je n'avais pas pensé à la méthode « $config['cdn_url'] ». Ce serait déjà très utile pour les fichiers statiques pour l'interface (css, images pour l'interface, fichiers JS, etc...). En plus on pourrait avoir un domaine « cookie free » qui améliore les points ySlow.
Perso tous les fichiers dans "uploads" sont gérés par mes clients, mes fichiers pour le design et l'intégration sont ailleurs. Donc l'usage d'un CDN pour "uploads" n'améliorait pas beaucoup la vitesse d'affichage de mes sites.
Votre avis pour améliorer la note PageSpeed/Yslow -
bess - 23/03/2011
Citation :Faudrait voir à quelles occasions est utilisé image_uploads_path et voir si on ne peut pas ouvrir un socket dessus : fsocken...
ca signifie modifier un fichier source, et donc perdre ta modif à la mise à jour suivante de cmsms
Citation :Perso tous les fichiers dans "uploads" sont gérés par mes clients, mes fichiers pour le design et l'intégration sont ailleurs. Donc l'usage d'un CDN pour "uploads" n'améliorait pas beaucoup la vitesse d'affichage de mes sites.
oui dans ce cas de figure c'est fichue mais comme je l'ai dit, cette manipulation n'est pas destiné aux néophytes mais bien à ceux qui maitrisent la bêêêête
Votre avis pour améliorer la note PageSpeed/Yslow -
jissey - 24/03/2011
Citation :ca signifie modifier un fichier source, et donc perdre ta modif à la mise à jour suivante de cmsms sad
Rien n'empêche de faire un autre module, c'est justifié dans ce cas.
Mais bon, il faut regarder de plus près avant de continuer les suppositions!
Votre avis pour améliorer la note PageSpeed/Yslow -
jissey - 26/03/2011
Voilà où est utilisé image_upload_path.
Sachant que certains modules l'utilise.
Ca va être coton :/
Code :
Search "image_uploads_path" (33 hits in 22 files)
C:\wamp\www\cmsms-1.9.4-FR\admin\imagefiles.php (1 hits)
Line 59: $dir = $config["image_uploads_path"];
C:\wamp\www\cmsms-1.9.4-FR\admin\systeminfo.php (3 hits)
Line 124: $tmp[1]['image_uploads_path'] = testConfig('image_uploads_path', 'image_uploads_path', 'testDirWrite');
Line 124: $tmp[1]['image_uploads_path'] = testConfig('image_uploads_path', 'image_uploads_path', 'testDirWrite');
Line 124: $tmp[1]['image_uploads_path'] = testConfig('image_uploads_path', 'image_uploads_path', 'testDirWrite');
C:\wamp\www\cmsms-1.9.4-FR\config.php (1 hits)
Line 159: $config['image_uploads_path'] = 'C:\wamp\www\cmsms-1.9.4-FR\uploads\images';
C:\wamp\www\cmsms-1.9.4-FR\install\lib\classes\CMSInstallPage7.class.php (1 hits)
Line 77: $newconfig['image_uploads_path'] = cms_join_path($newconfig['uploads_path'], 'images');
C:\wamp\www\cmsms-1.9.4-FR\lib\classes\class.content.inc.php (2 hits)
Line 2199: $dir = cms_join_path($config['image_uploads_path'],get_site_preference('content_imagefield_path'));
Line 2209: $dir = cms_join_path($config['image_uploads_path'],get_site_preference('content_thumbnailfield_path'));
C:\wamp\www\cmsms-1.9.4-FR\lib\config.functions.php (3 hits)
Line 67: $config["image_uploads_path"] = $config["root_path"] . "/uploads/images";
Line 345: \$config['image_uploads_path'] = '{$config['image_uploads_path']}';
Line 345: \$config['image_uploads_path'] = '{$config['image_uploads_path']}';
C:\wamp\www\cmsms-1.9.4-FR\lib\filemanager\ImageManager\Classes\ImageManager.php (2 hits)
Line 218: if(($path != "/") && (is_dir($config['image_uploads_path']."/".$path)))
Line 220: $d = @dir($config['image_uploads_path']."/".$path);
C:\wamp\www\cmsms-1.9.4-FR\lib\filemanager\ImageManager\config.inc.php (1 hits)
Line 23: $IMConfig['base_dir'] = $config["image_uploads_path"];
C:\wamp\www\cmsms-1.9.4-FR\modules\FileManager\filepicker.php (1 hits)
Line 23: $rootpath=$config["image_uploads_path"];
C:\wamp\www\cmsms-1.9.4-FR\modules\TinyMCE\action.filepicker.php (1 hits)
Line 28: $rootpath = $config["image_uploads_path"];
C:\wamp\www\cmsms-1.9.4-FR\plugins\function.image.php (1 hits)
Line 29: $size = @getimagesize($gCms->config['image_uploads_path'].'/'.$params['src']);
Votre avis pour améliorer la note PageSpeed/Yslow -
bess - 27/03/2011
j'ai utilise une solution simple pour cmsmadesimple, tu pourras le constater toi même sur le .fr
zero fichier modifié, juste un nouveau plugin et des modifications dans mes fichiers css
je file le reste des infos demain
Votre avis pour améliorer la note PageSpeed/Yslow -
jissey - 27/03/2011
je suis curieux de voir comment tu résous le "path" des fichiers sans dégrader l'administration de site:
le gestionnaire d'images et tinymce notamment...vivement demain
Votre avis pour améliorer la note PageSpeed/Yslow -
bess - 28/03/2011
Bon pour faire marcher mon "truc" il faut en tout premier point modifier vos DNS pour faire comprendre aux visiteur que static.votre_site.fr est en fait un alias faisant le même truc que
www.votre_site.fr
j'ai résolu le soucis en ajoutant une ligne : (chez Gandi)
Nom Type Valeur Prio TTL
* A 109.xx.xx.xx 3 heures
Ensuite chez notre hébergeur (Cpanel) j'ai fait comprendre que tous les static.cmsmadesimple.fr devaient pointer dans le même répertoire que tous les
www.cmsmadesimple.fr. Ainsi le visiteur demandant
www.cmsmadesimple.fr/image.gif et static.cmsmadesimple.fr/image.gif auront en retour la même image physiquement parlant.
Voilà pour la partie config du serveur. Maintenant concernant CmsMadeSimple.
En premier point : créer un fichier dans /plugins que l'on appellera function.cdn_url.php
son code :
Code :
<?php
#CMS - CMS Made Simple
#(c)2004 by Ted Kulp (wishy@users.sf.net)
#This project's homepage is: http://cmsmadesimple.sf.net
#
#This program is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 2 of the License, or
#(at your option) any later version.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.
#You should have received a copy of the GNU General Public License
#along with this program; if not, write to the Free Software
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
function smarty_function_cdn_url($params, &$smarty)
{
global $gCms;
$config = $gCms->GetConfig();
return $config['cdn_url'];
}
function smarty_cms_help_function_cdn_url() {
echo lang('help_function_cdn_url');
}
function smarty_cms_about_function_cdn_url() {
?>
<p>Author: Ted Kulp<ted@cmsmadesimple.org></p>
<p>Version: 1.0</p>
<p>
Change History:<br/>
None
</p>
<?php
}
?>
C'est clairement un re-pompage intégrale du plugin root_url au passage comme vous pourrez le voir. J'ai simplement modifié ce qui m'arrangeait.
Ensuite il faut modifier le fichier de config en ajoutant une nouvelle ligne (uniquement une) en dessous de config['root_url'] = '
www.votresite.fr';
vous ajoutez donc
$config['cdn_url'] = '
http://static.votresite.fr';
Dernier point : dans tout le CSS de votre site, les images du gabarit, tout ce que vous souhaitez finalement, vous ajouterez cette balise devant les URL
[[cdn_url]]/uploads/image_bouton.png (ça c'est pour les feuilles de style)
{{cdn_url}}/lib/jquery.js (ça c'est pour un template)
Le principe est ultra basique et permet pourtant pas mal de choses :
* Aucun hack de fichier
* demain static.votresite.fr peut devenir
www.un_autre_domaine.com sans poser de soucis
* l'administration de votre site n'est pas pénalisé puisqu'elle continuera à pointer vers les fichiers de votre hébergement, ceux là même accessibles soit par www soit par static
* Gain de notation Yslow : 78%->82% et Pagespeed : 84%->85%
* Gain de perf en terme de chargement client (aucun gain côté serveur bien évidement ce n'est pas le but)
Ce qui ne se fait pas / mal
* le pointage se fait sur un même répertoire, pas moyen d'externaliser les données sur un vrai cdn pour l'instant.
* Pour un site conséquent en terme d'image comme le notre, tout mettre sur static n'améliore pas toutes les notes puisqu'on reporte le soucis sur static (chez nous = 40 éléments sur un domaine = trop). Ce mauvais résultat est cependant nuancé par les cookies-free domains sur lequel nous restons énormément gagnant.
Use cookie-free domains : 80% \o/
Parallelize downloads across hostnames : 0%
* il reste des fichiers qui sont accompagnés de cookies : tout ce qui se trouve dans /tmp : le cache des fichiers css notamment. Je n'ai pas encore de solution.
Maintenant je réfléchit à une optimisation de la sorte : changer le principe de fonctionnement de la balise {cdn_url} pour faire ainsi :
{cdn_url} : renverra static.cmsmadesimple.fr
{cdn_url param='/upload/img.gif'} : renverra staticXXX.cmsmadesimple.fr
avec XXX un nombre situé dans un interval prédéfinit depuis le plugin (ou le fichier de config je ne sais pas encore).
L’intérêt est encore de diviser le nombre d’éléments par noms de domaine sans faire de l'aléatoire parce que si l'on fait aléatoire, les visiteurs rechargeront forcement les images (car url différentes) ce qui n'est pas notre but.
Je connais déjà l'algo pour faire ça, il me reste à trouver la manière la plus optimisée pour le faire ET dans le gabarit {cdn_url param='/upload/img.gif'} et dans le CSS [[cdn_url param='/upload/img.gif']]
Votre avis pour améliorer la note PageSpeed/Yslow -
jissey - 28/03/2011
oui, je comprends ce que tu as fait, ça n'est pas ce que j'avais cherché comme je l'ai expliqué plus haut.
On est pas sur la même piste...
Je mets de côté pour plus tard.
Votre avis pour améliorer la note PageSpeed/Yslow -
bess - 28/03/2011
réexplique ton soucis stp, par ce qu’apparemment j'ai loupé un morceau.
Toi ce que tu veux c'est pouvoir depuis l'admin de cmsms gérer des fichiers situés hors install de cmsms ?
Votre avis pour améliorer la note PageSpeed/Yslow -
jissey - 28/03/2011
Citation :Toi ce que tu veux c'est pouvoir depuis l'admin de cmsms gérer des fichiers situés hors install de cmsms ?
Oui, c'est bien ça. Je veux externaliser le dossier uploads pour pouvoir l'attaquer depuis plusieurs sites différents. C'est en ce sens que ce sujet m'intéressait.
Je verrai ça plus tard, c'est pour un stage qui se déroule chaque année.
Je pense que c'est pratiquement impossible à faire sans toucher au core.
Tu peux fermer le fil...
Votre avis pour améliorer la note PageSpeed/Yslow -
bess - 29/03/2011
Citation :Je veux externaliser le dossier uploads pour pouvoir l'attaquer depuis plusieurs sites
même serveur ou serveur différent ? en lecture ou en modification pour tous ?
Votre avis pour améliorer la note PageSpeed/Yslow -
jissey - 29/03/2011
Serveur différent, sinon, ce serait trop simple
D'où le problème du root_path.
lecture ou écriture : dans les mêmes conditions que l'original.
Votre avis pour améliorer la note PageSpeed/Yslow -
bess - 29/03/2011
alors il faut aborder ton soucis sous un autre angle avec des pseudo-cron tache.
Par exemple, une tache cron qui toutes les X minutes va se connecter sur le serveur de données, va comparer le contenu du serveur avec le sien et se mettre à jour (selon la date de dernière modif par exemple)
la connexion FTP me semble la plus adaptée dans ton contexte.
Mais attention aux soucis de co-modification ! :/
également un soucis pour savoir si un fichier présent uniquement sur le serveur central doit être considéré comme nouveau fichier ou comme un fichier à supprimer depuis le PC qui se connecte.
Du coup... pourquoi pas gérer un système svn carrement, piloté depuis php ?
voilà quelques idées je ne sais pas si c'est réalisable mais à priori ça doit l'être...