Changeset 95385 in spip-zone


Ignore:
Timestamp:
Feb 23, 2016, 10:12:31 AM (3 years ago)
Author:
cedric@…
Message:

Amelioration : on peut definir une URL statique pour servir les ressources (images, js) sans cookie.
L'URL definie est alors utilisee pour les images contenues dans les CSS minifiees, et dans le HTML des pages servies, sans modification du squelette.
On n'utilise pas cette URL pour servir la CSS minifiee car celle-ci est prefetch avec une header http link, et la servir sur un domaine different retarde son arrivee car il faut une requete DNS en plus.

Location:
_core_/plugins/compresseur
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • _core_/plugins/compresseur/compresseur_pipeline.php

    r94396 r95385  
    8080}
    8181
     82
     83/**
     84 * Transformer toutes les URLs relatives image,js en url absolues qui pointent sur le domaine statique
     85 * on applique pas a l'URL de la CSS, car on envoie un header http link qui permet au navigateur de la pre-fetch
     86 * sur le meme domaine, sans avoir a faire de requete DNS
     87 * @param string $flux
     88 * @return string
     89 */
     90function compresseur_affichage_final($flux) {
     91        if (isset($GLOBALS['meta']['url_statique_ressources'])
     92          and isset($GLOBALS['html'])
     93          and $GLOBALS['html']
     94          and $url_statique = $GLOBALS['meta']['url_statique_ressources']){
     95                $url_statique = rtrim(protocole_implicite($url_statique), "/") . "/";
     96                $flux = preg_replace(",(href|src)=([\"'])([^/][^:\"']*[.](?:png|gif|jpg|js)(?:\?[0-9]+)?)\\2,Uims","\\1=\\2".$url_statique."\\3\\2",$flux);
     97        }
     98
     99  return $flux;
     100}
     101
    82102/**
    83103 * Lister les metas du compresseur et leurs valeurs par défaut
     
    93113        $metas['auto_compress_closure'] = 'non';
    94114        $metas['auto_compress_css'] = 'non';
     115        $metas['url_statique_ressources'] = '';
    95116
    96117        return $metas;
  • _core_/plugins/compresseur/formulaires/configurer_compresseur.html

    r90210 r95385  
    88                [(#ACTION_FORMULAIRE{#ENV{action}})]
    99                <div class="editer-groupe">
     10                        #SET{name,url_statique_ressources}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
     11                        <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
     12                                <label for="#GET{name}"><:compresseur:label_url_statique_ressources:></label>[
     13                                <span class='erreur_message'>(#GET{erreurs})</span>
     14                                ]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
     15                                <p class="explication"><:compresseur:explication_url_statique_ressources:></p>
     16                                <style>
     17                                        .editer_url_statique_ressources input.text{padding-right: 32px;background-image: none;}
     18                                        .editer_url_statique_ressources input.text{background-position: right center;background-repeat: no-repeat; background-image:url([(#CHEMIN_IMAGE{ok-24.png}|url_absolue{#ENV*{#GET{name},#GET{defaut}}|sinon{#URL_SITE_SPIP}|concat{'/',#EVAL{_DIR_RACINE?_DIR_RESTREINT_ABS:''}}})]);}
     19                                </style>
     20                        </div>
    1021                        <div class='fieldset'>
    1122                                <fieldset>
  • _core_/plugins/compresseur/formulaires/configurer_compresseur.php

    r94396 r95385  
    3333        $valeurs['auto_compress_css'] = $GLOBALS['meta']['auto_compress_css'];
    3434        $valeurs['auto_compress_closure'] = $GLOBALS['meta']['auto_compress_closure'];
     35        $valeurs['url_statique_ressources'] = $GLOBALS['meta']['url_statique_ressources'];
    3536
    3637        return $valeurs;
     
    5455        }
    5556
     57        if ($url = _request('url_statique_ressources')){
     58                $url = preg_replace(",/?\s*$,", "", $url);
     59                if (!tester_url_absolue($url)) {
     60                        $protocole = explode('://',$GLOBALS['meta']['adresse_site']);
     61                        $protocole = reset($protocole);
     62                        $url = $protocole . "://$url";
     63                }
     64                set_request('url_statique_ressources',$url);
     65        }
     66
     67
    5668        return $erreurs;
    5769}
  • _core_/plugins/compresseur/inc/compresseur.php

    r94396 r95385  
    196196                // on exclue le protocole car la compression se fait en url relative au protocole
    197197                $callbacks[] = protocole_implicite($url_base);
     198                // et l'URL des ressources statiques si configuree
     199                if (isset($GLOBALS['meta']['url_statique_ressources']) and $GLOBALS['meta']['url_statique_ressources']){
     200                        $callbacks[] = protocole_implicite($GLOBALS['meta']['url_statique_ressources']);
     201                }
    198202        }
    199203        if ($format == 'js' and $GLOBALS['meta']['auto_compress_closure'] == 'oui') {
     
    231235
    232236        if (is_null($fonctions)) {
    233                 $fonctions = array('css_resolve_atimport', 'urls_absolues_css');
     237                $fonctions = array('css_resolve_atimport', 'urls_absolues_css', 'css_url_statique_ressources');
    234238                // les fonctions de preparation aux CSS peuvent etre personalisees
    235239                // via la globale $compresseur_filtres_css sous forme de tableau de fonctions ordonnees
     
    347351 * @param string $contenu
    348352 * @param string $url_base
     353 * @param string $filename
    349354 * @return string
    350355 */
    351 function css_resolve_atimport($contenu, $url_base) {
     356function css_resolve_atimport($contenu, $url_base, $filename) {
    352357        // vite si rien a faire
    353358        if (strpos($contenu, "@import") === false) {
     
    440445        return $nom;
    441446}
     447
     448/**
     449 * Remplacer l'URL du site par une url de ressource genre static.example.org
     450 * qui evite les echanges de cookie pour les ressources images
     451 * (peut aussi etre l'URL d'un CDN ou autre provider de ressources statiques)
     452 *
     453 * @param string $contenu
     454 * @param string $url_base
     455 * @param string $filename
     456 * @return mixed
     457 */
     458function css_url_statique_ressources($contenu, $url_base, $filename){
     459
     460        if (isset($GLOBALS['meta']['url_statique_ressources'])
     461          and $url_statique = $GLOBALS['meta']['url_statique_ressources']) {
     462                $url_statique = rtrim(protocole_implicite($url_statique),"/")."/";
     463                $url_site = rtrim(protocole_implicite($GLOBALS['meta']['adresse_site']),"/")."/";
     464                $contenu = str_replace($url_site, $url_statique, $contenu);
     465        }
     466        return $contenu;
     467}
  • _core_/plugins/compresseur/lang/compresseur_fr.php

    r93910 r95385  
    1616        'item_compresseur_js' => 'Activer la compression des scripts (javascript)',
    1717
     18        // L
     19        'label_url_statique_ressources' => 'URL ressources',
     20        'explication_url_statique_ressources' => 'Une URL qui permet de servir les fichiers statiques (images, CSS…) sans cookie. Généralement un sous-domaine alternatif qui pointe aussi sur le site.',
     21
    1822        // T
    1923        'texte_compacter_avertissement' => 'Attention à ne pas activer ces options durant le développement de votre site : les éléments compactés perdent toute lisibilité.',
  • _core_/plugins/compresseur/paquet.xml

    r94497 r95385  
    22        prefix="compresseur"
    33        categorie="performance"
    4         version="1.9.14"
     4        version="1.10.01"
    55        etat="stable"
    66        compatibilite="[3.1.0;3.1.*]"
     
    2020        <pipeline nom="header_prive" inclure="compresseur_pipeline.php" />
    2121        <pipeline nom="affiche_milieu" inclure="compresseur_pipeline.php" />
     22        <pipeline nom="affichage_final" inclure="compresseur_pipeline.php" />
    2223        <pipeline nom="configurer_liste_metas" inclure="compresseur_pipeline.php" />
    2324        <pipeline nom="ieconfig_metas" inclure="compresseur_ieconfig.php" />
Note: See TracChangeset for help on using the changeset viewer.