source: spip-zone/_core_/plugins/compresseur/compresseur_pipeline.php @ 95385

Last change on this file since 95385 was 95385, checked in by cedric@…, 5 years ago

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.

File size: 3.5 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2016                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13/**
14 * Fonctions et filtres du compresseur
15 *
16 * @package SPIP\Compresseur\Pipelines
17 */
18if (!defined("_ECRIRE_INC_VERSION")) {
19        return;
20}
21
22/**
23 * Compression des JS et CSS de l'espace privé
24 *
25 * @pipeline header_prive
26 * @see compacte_head()
27 *
28 * @param string $flux
29 *     Partie de contenu du head HTML de l'espace privé
30 * @return string
31 *     Partie de contenu du head HTML de l'espace privé
32 */
33function compresseur_header_prive($flux) {
34        include_spip('compresseur_fonctions');
35
36        return compacte_head($flux);
37}
38
39
40/**
41 * Compression des JS et CSS de l'espace public
42 *
43 * Injecter l'appel au compresseur sous la forme de filtre
44 * pour intervenir sur l'ensemble du head du squelette public
45 *
46 * @pipeline insert_head
47 * @see compacte_head()
48 *
49 * @param string $flux
50 *     Partie de contenu du head HTML de l'espace public
51 * @return string
52 *     Partie de contenu du head HTML de l'espace public
53 */
54function compresseur_insert_head($flux) {
55        $flux .= '<'
56                . '?php header("X-Spip-Filtre: '
57                . 'compacte_head'
58                . '"); ?' . '>';
59
60        return $flux;
61}
62
63/**
64 * Afficher le formulaire de configuration sur la page de configurations avancées
65 *
66 * @pipeline affiche_milieu
67 *
68 * @param string $flux Données du pipeline
69 * @return string       Données du pipeline
70 */
71function compresseur_affiche_milieu($flux) {
72
73        if ($flux['args']['exec'] == 'configurer_avancees') {
74                // Compression http et compactages CSS ou JS
75                $flux['data'] .= recuperer_fond('prive/squelettes/inclure/configurer',
76                        array('configurer' => 'configurer_compresseur'));
77        }
78
79        return $flux;
80}
81
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
102/**
103 * Lister les metas du compresseur et leurs valeurs par défaut
104 *
105 * @pipeline configurer_liste_metas
106 * @param array $metas
107 *     Couples nom de la méta => valeur par défaut
108 * @return array
109 *    Couples nom de la méta => valeur par défaut
110 */
111function compresseur_configurer_liste_metas($metas) {
112        $metas['auto_compress_js'] = 'non';
113        $metas['auto_compress_closure'] = 'non';
114        $metas['auto_compress_css'] = 'non';
115        $metas['url_statique_ressources'] = '';
116
117        return $metas;
118}
Note: See TracBrowser for help on using the repository browser.