Browse Source

Éviter lorsqu'il n'y a pas de compression JS/CSS activée, que le navigateur redemande les fichiers css et js du porte plume qui sont compilés par SPIP.

On ajoute cache-client sur le cache de ces fichiers. C'est presque suffisant, mais il faut aussi les recalculer lorsqu'un plugin qui modifie les fichiers
de porte-plume s'active ou se désactive. Du coup, on calcule un hash et un fond statique pour ces 2 fichiers, qui dépend du code variable de ces fichiers.

Bon du coup on peut éviter quelques hits sur le serveur, mais la contrepartie, c'est qu'il faut calculer ces hash, parfois inutilement j'imagine, au calcul d'une page.
À voir.
master v1.16.0
marcimat@rezo.net 6 years ago
parent
commit
0a34291c9b
  1. 2
      barre_outils_icones.css.html
  2. 2
      paquet.xml
  3. 77
      porte_plume_fonctions.php
  4. 10
      porte_plume_pipelines.php
  5. 2
      porte_plume_start.js.html
  6. 74
      porte_plume_start.js_fonctions.php

2
barre_outils_icones.css.html

@ -1,4 +1,4 @@
#CACHE{7*24*3600}
#CACHE{7*24*3600,cache-client}
#HTTP_HEADER{Content-Type: text/css; charset=utf-8}
#HTTP_HEADER{Vary: Accept-Encoding}
[(#VAL|barre_outils_css_icones)]

2
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="porte_plume"
categorie="edition"
version="1.15.14"
version="1.16.0"
etat="stable"
compatibilite="[3.1.0;3.1.*]"
logo="images/porte-plume-32.png"

77
porte_plume_fonctions.php

@ -904,3 +904,80 @@ function traitements_previsu($texte, $nom_champ = '', $type_objet = '', $connect
// forcément de lui
return safehtml($texte);
}
/**
* Retourne la définition de la barre markitup désignée.
* (cette déclaration est au format json)
*
* Deux pipelines 'porte_plume_pre_charger' et 'porte_plume_charger'
* permettent de récuperer l'objet de classe Barre_outil
* avant son export en json pour modifier des elements.
*
* @pipeline_appel porte_plume_barre_pre_charger
* Charge des nouveaux boutons au besoin
* @pipeline_appel porte_plume_barre_charger
* Affiche ou cache certains boutons
*
* @return string Déclaration json
*/
function porte_plume_creer_json_markitup() {
// on recupere l'ensemble des barres d'outils connues
include_spip('porte_plume_fonctions');
if (!$sets = barre_outils_liste()) {
return null;
}
// 1) On initialise tous les jeux de barres
$barres = array();
foreach ($sets as $set) {
if (($barre = barre_outils_initialiser($set)) and is_object($barre)) {
$barres[$set] = $barre;
}
}
// 2) Préchargement
/**
* Charger des nouveaux boutons au besoin
*
* @example
* $barre = &$flux['spip'];
* $barre->ajouterApres('bold',array(params));
* $barre->ajouterAvant('bold',array(params));
*
* $bold = $barre->get('bold');
* $bold['id'] = 'bold2';
* $barre->ajouterApres('italic',$bold);
* @pipeline_appel porte_plume_barre_pre_charger
*/
$barres = pipeline('porte_plume_barre_pre_charger', $barres);
// 3) Chargement
/**
* Cacher ou afficher certains boutons au besoin
*
* @example
* $barre = &$flux['spip'];
* $barre->afficher('bold');
* $barre->cacher('bold');
*
* $barre->cacherTout();
* $barre->afficher(array('bold','italic','header1'));
* @pipeline_appel porte_plume_barre_charger
*/
$barres = pipeline('porte_plume_barre_charger', $barres);
// 4 On crée les jsons
$json = "";
foreach ($barres as $set => $barre) {
$json .= $barre->creer_json();
}
return $json;
}

10
porte_plume_pipelines.php

@ -106,9 +106,12 @@ function porte_plume_insert_head_prive($flux) {
function porte_plume_inserer_head($flux, $lang, $prive = false) {
$markitup = find_in_path('javascript/jquery.markitup_pour_spip.js');
$js_previsu = find_in_path('javascript/jquery.previsu_spip.js');
$js_start = parametre_url(generer_url_public('porte_plume_start.js'), 'lang', $lang);
if (defined('_VAR_MODE') and _VAR_MODE == 'recalcul') {
$js_start = parametre_url(generer_url_public('porte_plume_start.js'), 'lang', $lang);
$js_start = parametre_url($js_start, 'var_mode', 'recalcul');
} else {
$hash = md5(porte_plume_creer_json_markitup());
$js_start = produire_fond_statique('porte_plume_start.js', array('lang' => $lang, 'hash' => $hash));
}
$flux .=
@ -149,9 +152,12 @@ function porte_plume_insert_head_css($flux = '', $prive = false) {
$flux .= "<link rel='stylesheet' type='text/css' media='all' href='$cssprive' />\n";
}
$css = direction_css(find_in_path('css/barre_outils.css'), lang_dir());
$css_icones = generer_url_public('barre_outils_icones.css');
if (defined('_VAR_MODE') and _VAR_MODE == 'recalcul') {
$css_icones = generer_url_public('barre_outils_icones.css');
$css_icones = parametre_url($css_icones, 'var_mode', 'recalcul');
} else {
$hash = md5(barre_outils_css_icones());
$css_icones = produire_fond_statique('barre_outils_icones.css', array('hash' => $hash));
}
$flux
.= "<link rel='stylesheet' type='text/css' media='all' href='$css' />\n"

2
porte_plume_start.js.html

@ -1,4 +1,4 @@
#CACHE{7*24*3600}
#CACHE{7*24*3600,cache-client}
#HTTP_HEADER{Content-Type: text/javascript; charset=#CHARSET}
[(#REM) chargement des definitions des barres d'outils

74
porte_plume_start.js_fonctions.php

@ -10,77 +10,3 @@
if (!defined("_ECRIRE_INC_VERSION")) {
return;
}
/**
* Retourne la définition de la barre markitup désignée.
* (cette déclaration est au format json)
*
* Deux pipelines 'porte_plume_pre_charger' et 'porte_plume_charger'
* permettent de récuperer l'objet de classe Barre_outil
* avant son export en json pour modifier des elements.
*
* @pipeline_appel porte_plume_barre_pre_charger
* Charge des nouveaux boutons au besoin
* @pipeline_appel porte_plume_barre_charger
* Affiche ou cache certains boutons
*
* @return string Déclaration json
*/
function porte_plume_creer_json_markitup() {
// on recupere l'ensemble des barres d'outils connues
include_spip('porte_plume_fonctions');
if (!$sets = barre_outils_liste()) {
return null;
}
// 1) On initialise tous les jeux de barres
$barres = array();
foreach ($sets as $set) {
if (($barre = barre_outils_initialiser($set)) and is_object($barre)) {
$barres[$set] = $barre;
}
}
// 2) Préchargement
/**
* Charger des nouveaux boutons au besoin
*
* @example
* $barre = &$flux['spip'];
* $barre->ajouterApres('bold',array(params));
* $barre->ajouterAvant('bold',array(params));
*
* $bold = $barre->get('bold');
* $bold['id'] = 'bold2';
* $barre->ajouterApres('italic',$bold);
* @pipeline_appel porte_plume_barre_pre_charger
*/
$barres = pipeline('porte_plume_barre_pre_charger', $barres);
// 3) Chargement
/**
* Cacher ou afficher certains boutons au besoin
*
* @example
* $barre = &$flux['spip'];
* $barre->afficher('bold');
* $barre->cacher('bold');
*
* $barre->cacherTout();
* $barre->afficher(array('bold','italic','header1'));
* @pipeline_appel porte_plume_barre_charger
*/
$barres = pipeline('porte_plume_barre_charger', $barres);
// 4 On crée les jsons
$json = "";
foreach ($barres as $set => $barre) {
$json .= $barre->creer_json();
}
return $json;
}

Loading…
Cancel
Save