Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Votre avis pour améliorer la note PageSpeed/Yslow
#1
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-delive...k-cdn.html
http://gtmetrix.com/use-cookie-free-domains.html
http://gtmetrix.com/parallelize-download...names.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...
Répondre
#2
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)
Répondre
#3
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]
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
Répondre
#4
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 Big Grin
Répondre
#5
Faudrait voir à quelles occasions est utilisé image_uploads_path et voir si on ne peut pas ouvrir un socket dessus : fsocken...
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
Répondre
#6
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.
Répondre
#7
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 Sad

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 Big Grin
Répondre
#8
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!
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
Répondre
#9
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']);
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
Répondre
#10
j'ai utilise une solution simple pour cmsmadesimple, tu pourras le constater toi même sur le .fr Big Grin

zero fichier modifié, juste un nouveau plugin et des modifications dans mes fichiers css

je file le reste des infos demain
Répondre
#11
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 Big Grin
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
Répondre
#12
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 ([email protected])
#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&lt;[email protected]&gt;</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']]
Répondre
#13
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.
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
Répondre
#14
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 ?
Répondre
#15
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...
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
Répondre
#16
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 ?
Répondre
#17
Serveur différent, sinon, ce serait trop simple Big Grin D'où le problème du root_path.
lecture ou écriture : dans les mêmes conditions que l'original.
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
Répondre
#18
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...
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)