Rendre les librairies javascript canoniques ?

Désolé pour le bruit, j'ai un peu de mal avec la liste.

--

Bonjour,

J'utilise SPIP 3.1.7 associé à mod_pagespeed pour optimiser les images
...

Je teste l'utilisation canoniques des javascript suivants :

<script src="squelettes/javascript/jquery-1.12.4.js"></script>
<script src="squelettes/javascript/jquery.form-3.51.0.js"></script>
<script src="squelettes/javascript/jquery.autosave.js"></script>
<script src="squelettes/javascript/jquery.placeholder-
label.js"></script>
<script src="squelettes/javascript/ajaxCallback.js"></script>
<script src="squelettes/javascript/jquery.cookie.js"></script>

Avec le filtre "ModPagespeedEnableFilters
canonicalize_javascript_libraries", mod_pagespeed identifie les
librairies disponibles sur Googleapi et incluse dans les squelettes (le
html), et canonise "automatiquement" celles qu'il connait.

Par exemple :

<script src="squelettes/javascript/jquery-1.12.4.js"></script>

devient :

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery
.min.js"></script>; ;

Ce qui permet d'obtenir une réponse 304 si le visiteur du site a déjà
visité un site avec cette librairie. Ce qui est fort propable et évite
donc son téléchargement.

Sans mod_pagespeed, il suffit d'inclure directement l'URL https://ajax
.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js .

Pour :

squelettes/javascript/jquery.form-3.51.0.js il y a https://cdn.jsdeli
vr.net/npm/jquery-form@3.50.0/jquery.form.min.js

squelettes/javascript/jquery.cookie.js il y a https://cdn.jsdelivr.net/
npm/jquery.cookie@1.4.1/jquery.cookie.min.js

Cela fait 3 des 6 librairies disponibles sur CDN.

Il manque/manquait :

squelettes/javascript/jquery.autosave.js

squelettes/javascript/jquery.placeholder-label.js

squelettes/javascript/ajaxCallback.js

Ces librairies sont disponibles maintenant aux adresses :

https://cdn.jsdelivr.net/gh/opalesurfcasting/jquery.autosave@v1.0/jquer
y.autosave.min.js

https://cdn.jsdelivr.net/gh/opalesurfcasting/jquery.placeholder-label@v
1.0/jquery.placeholder-label.min.js">

https://cdn.jsdelivr.net/gh/opalesurfcasting/ajaxCallback.js@v1.0/ajaxC
allback.min.js

Cependant, pour pleinement en exploiter les bénéfices, il serait
préférable d'avoir quelque chose du type :

https://cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/jquery.autosave.
js@spip-3.1.6/jquery.autosave.min.js

https://cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/jquery.placehold
er-label.js@spip-3.1.6/jquery.placeholder-label.min.js">;

https://cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/ajaxCallback.js@
spip-3.1.6/ajaxCallback.min.js

ainsi, le chargement de ces librairies seraient "canonisées" pour tous
les usagers de SPIP (ici 3.1.6, pas de tag spip-3.1.7 sur le dépot
Github SPIP).

Pour les éventuels utilisateurs de mod_pagespeed, l'ajout des lignes
suivantes à pagespeed.conf suffit pour activer la "canonisation" sans
toucher aux squelettes:

##Librairies disponibles sur jsdelivr.net

ModPagespeedLibrary 19531 6GKok1X3WdAPsjnOlsZ6G \
cdn.jsdelivr.net/npm/jquery-form@3.50.0/jquery.form.min.js

ModPagespeedLibrary 1801 h-wYRZaviFW7fMplVK8sH \
cdn.jsdelivr.net/npm/jquery.cookie@1.4.1/jquery.cookie.min.js

##Librairies disponibles sur jsdeliver.net par le biais de mes dépots
Github

ModPagespeedLibrary 741 Ppl_Ry-HtT_ZvQ-n3zm_Q \
cdn.jsdelivr.net/gh/opalesurfcasting/jquery.autosave@v1.0/jquery.aut
osave.min.js

ModPagespeedLibrary 1074 y25eNqWaxVpFF5D96VREu \
cdn.jsdelivr.net/gh/opalesurfcasting/jquery.placeholder-label@v1.0/j
query.placeholder-label.min.js

ModPagespeedLibrary 21074 NvlVPCOPnd86d229dLuoo \
//cdn.jsdelivr.net/gh/opalesurfcasting/ajaxCallback.js@v1.0/aja
xCallback.min.js

# remplacer par celles disponibles sur le dépot Github de spip pour
plus de mutualisation

ModPagespeedLibrary 741 Ppl_Ry-HtT_ZvQ-n3zm_Q \
cdn.jsdelivr.net/gh/
spip/SPIP/prive/javascript/jquery.autosave@spip-3.1.6/jquery.autosave.m
in.js

ModPagespeedLibrary 1074 y25eNqWaxVpFF5D96VREu \
cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/jquery.placeholder-la
bel@spip-3.1.6/jquery.placeholder-label.min.js

ModPagespeedLibrary 21074 NvlVPCOPnd86d229dLuoo \
//cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/ajaxCallback.j
s@spip-3.1.6/ajaxCallback.min.js

Bien entendu plus il y aura d'utilisateur, plus le bénéfice pour chacun
sera intéressant.

Seul, cela ne sert à rien.

Qu'en pensez vous ?

Cordialement,

Eric

Bonjour Eric,

Personnellement, je trouve que cela augmente la dépendance du Web aux
GAFAM, et ce n'est pas une super bonne chose sur le plan éthique.

Sur le plan technique, je n'ai jamais utiliser tout cela. Les gains me
semble complètement négligeable si on active la compression des scripts
de SPIP.

--
Didier

eric <webmaster@opalesurfcasting.net> writes:

Désolé pour le bruit, j'ai un peu de mal avec la liste.

Bonsoir,

Personnellement, je trouve que cela augmente la dépendance du Web

aux> GAFAM, et ce >n'est pas une super bonne chose sur le plan éthique.

Je comprends.

Pour ma part, j'utilise mod_pagespeed depuis 2014, avec SPIP 1.8.3 (je
passe à 3.1.7), l'utilisation de la bande passante est divisée par 2
environ , ce qui m'a permis d'utiliser un serveur de bureau recyclé
(économe en energie) et un accès grand public (liberté en anglais et
1024Kb en upload) avec de meilleurs temps de chargement (/2 environ)
que sur le dédié utilisé auparavant.

Par ailleurs, j'ai fait une erreur concernant les urls cdn.

Elles sont :

https://cdn.jsdelivr.net/gh/spip/SPIP@spip-3.1.6/prive/javascript/jquer
y.autosave.min.js
https://cdn.jsdelivr.net/gh/spip/SPIP@spip-3.1.6/prive/javascript/jquer
y.placeholder-label.min.js
https://cdn.jsdelivr.net/gh/spip/SPIP@spip-3.1.6/prive/javascript/ajaxC
allback.min.js

Pas de tag/release 3.1.7 sur le dépôt Github ?

Ce qui donne pour d'éventuels utilisateurs de mod_pagespeed :

ModPagespeedLibrary 741 Ppl_Ry-HtT_ZvQ-n3zm_Q \
//cdn.jsdelivr.net/gh/spip/SPIP@spip-3.1.6/prive/javascript/jquery.a
utosave.min.js
ModPagespeedLibrary 1074 y25eNqWaxVpFF5D96VREu \
//cdn.jsdelivr.net/gh/spip/SPIP@spip-3.1.6/prive/javascript/jquery.p
laceholder-label.min.js
ModPagespeedLibrary 21074 NvlVPCOPnd86d229dLuoo \
//cdn.jsdelivr.net/gh/spip/SPIP@spip-3.1.6/prive/javascript/aja
xCallback.min.js

Cordialement,

Eric

Bonsoir,

Un lien avec la liste des librairies javascript spip partagées :

rive%2Fjavascript

Il manque celles de plugin-dist et notamment de porte-plumes.

Cordialement,

Eric

vendredi 01 décembre 2017 à 19:47 +0100, eric a écrit :

Bonsoir,

>
> Personnellement, je trouve que cela augmente la dépendance du Web
aux> GAFAM, et ce >n'est pas une super bonne chose sur le plan
éthique.

Je comprends.

Pour ma part, j'utilise mod_pagespeed depuis 2014, avec SPIP 1.8.3
(je
passe à 3.1.7), l'utilisation de la bande passante est divisée par 2
environ , ce qui m'a permis d'utiliser un serveur de bureau recyclé
(économe en energie) et un accès grand public (liberté en anglais et
1024Kb en upload) avec de meilleurs temps de chargement (/2 environ)
que sur le dédié utilisé auparavant.

Par ailleurs, j'ai fait une erreur concernant les urls cdn.

Elles sont :

https://cdn.jsdelivr.net/gh/spip/SPIP@spip-3.1.6/prive/javascript/jqu
er
y.autosave.min.js
https://cdn.jsdelivr.net/gh/spip/SPIP@spip-3.1.6/prive/javascript/jqu
er
y.placeholder-label.min.js
https://cdn.jsdelivr.net/gh/spip/SPIP@spip-3.1.6/prive/javascript/aja
xC
allback.min.js

Pas de tag/release 3.1.7 sur le dépôt Github ?

Ce qui donne pour d'éventuels utilisateurs de mod_pagespeed :

ModPagespeedLibrary 741 Ppl_Ry-HtT_ZvQ-n3zm_Q \
//cdn.jsdelivr.net/gh/spip/SPIP@spip-3.1.6/prive/javascript/jquery
.a
utosave.min.js
ModPagespeedLibrary 1074 y25eNqWaxVpFF5D96VREu \
//cdn.jsdelivr.net/gh/spip/SPIP@spip-3.1.6/prive/javascript/jquery
.p
laceholder-label.min.js
ModPagespeedLibrary 21074 NvlVPCOPnd86d229dLuoo \
//cdn.jsdelivr.net/gh/spip/SPIP@spip-3.1.6/prive/javascript/a
ja
xCallback.min.js

Cordialement,

Eric
_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Bonsoir,

Pour canoniser/mutualiser les javascripts jquery (https://www.jsdelivr.
com/package/gh/spip/SPIP), dans mes_options.php :

//remplacer f_jQuery par canonise_f_jQuery
$GLOBALS['spip_pipeline']['insert_head'] .= '|canonise_f_jQuery';

/**
* Canoniser les appels jQuery
*
* La fonction modifie les urls des scripts jQuery
* ainsi que celles de certains de ses plugins pour les remplacer par
* celles des fichiers disponibles sur Github, en respectant
* le versionning de SPIP.
*
* Cette fonction fait appel au service cdn.jsdeliver.net qui
* rend possible la canonisation des dépôts github.
*
* La liste des js chargés peut être complétée par le pipeline
* 'jquery_plugins'.
*
* Cette fonction est appelée par le pipeline insert_head
* après f_Jquery().
*
* Elle ne concerne donc que les javascripts indispensables ou
* injectés par le webmaster/développeur
*
* @see f_jQuery()
*
* @pipeline insert_head
* @pipeline_appel jquery_plugins
*
* @param string $texte Contenu qui sera inséré dans le head HTML
* @return string Contenu qui sera inséré dans le head HTML
**/
function canonise_f_jQuery($texte)
{
$x = '';
$y = '';
//Version de spip - tag - Release Github
$version_release_github = "spip-" .
$GLOBALS['spip_version_branche'];
$domain_cdn = "//cdn.jsdelivr.net/";
$prefix_cdn_combine = "combine/";
$folder_cdn = "gh/spip/SPIP" . "@" . $version_release_github . "/";
$regex = "/< *script[^>]*src *= *[\"\']?([^\"\']*)/i";
preg_match_all($regex, $texte, $resultats);
if (isset($resultats[1])) {
$i = 0;
$len = count($resultats[1]);
foreach (array_unique($resultats[1]) as $script) {
$script = strtok($script, '?');
if ($script = find_in_path($script)) { //abandonne si le
script n'est pas présent dans les fichiers originaux SPIP.
$script = str_replace(".js", ".min.js", $script);
if ($script === "prive/javascript/jquery.min.js") { //à
part, utilise ce filtre + canonise avec mod_pagespeed, sinon utilise
cdn.jsdelivr.net
$script = $domain_cdn . $folder_cdn . $script;
$x .= "\n<script src=\"$script\"
type=\"text/javascript\"></script>\n";
} else if ($i < $len -1) {
$y .= $folder_cdn . $script . ",";
} else {
$y .= $folder_cdn . $script;
}
}
$i++;
}
$y = $domain_cdn . $prefix_cdn_combine . $y;
$y = "\n<script src=\"$y\"
type=\"text/javascript\"></script>\n";
}
$texte = $x . $y; // return text, if nothing is found, use default
SPIP jQuery files

return $texte;

}

Si cela en intéresse quelques uns ...
Cela peut être améliorer ...
Est ce la bonne méthode ?

Cordialement,

Eric

Le vendredi 01 décembre 2017 à 18:42 +0100, eric a écrit :

Désolé pour le bruit, j'ai un peu de mal avec la liste.

--

Bonjour,

J'utilise SPIP 3.1.7 associé à mod_pagespeed pour optimiser les
images
...

Je teste l'utilisation canoniques des javascript suivants :

<script src="squelettes/javascript/jquery-1.12.4.js"></script>
<script src="squelettes/javascript/jquery.form-3.51.0.js"></script>
<script src="squelettes/javascript/jquery.autosave.js"></script>
<script src="squelettes/javascript/jquery.placeholder-
label.js"></script>
<script src="squelettes/javascript/ajaxCallback.js"></script>
<script src="squelettes/javascript/jquery.cookie.js"></script>

Avec le filtre "ModPagespeedEnableFilters
canonicalize_javascript_libraries", mod_pagespeed identifie les
librairies disponibles sur Googleapi et incluse dans les squelettes
(le
html), et canonise "automatiquement" celles qu'il connait.

Par exemple :

<script src="squelettes/javascript/jquery-1.12.4.js"></script>

devient :

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jque
ry
.min.js"></script>; ;

Ce qui permet d'obtenir une réponse 304 si le visiteur du site a
déjà
visité un site avec cette librairie. Ce qui est fort propable et
évite
donc son téléchargement.

Sans mod_pagespeed, il suffit d'inclure directement l'URL https://aj
ax
.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js .

Pour :

squelettes/javascript/jquery.form-3.51.0.js il y a https://cdn.jsde
li
vr.net/npm/jquery-form@3.50.0/jquery.form.min.js

squelettes/javascript/jquery.cookie.js il y a https://cdn.jsdelivr.ne
t/
npm/jquery.cookie@1.4.1/jquery.cookie.min.js

Cela fait 3 des 6 librairies disponibles sur CDN.

Il manque/manquait :

squelettes/javascript/jquery.autosave.js

squelettes/javascript/jquery.placeholder-label.js

squelettes/javascript/ajaxCallback.js

Ces librairies sont disponibles maintenant aux adresses :

https://cdn.jsdelivr.net/gh/opalesurfcasting/jquery.autosave@v1.0/jqu
er
y.autosave.min.js

https://cdn.jsdelivr.net/gh/opalesurfcasting/jquery.placeholder-label
@v
1.0/jquery.placeholder-label.min.js">

https://cdn.jsdelivr.net/gh/opalesurfcasting/ajaxCallback.js@v1.0/aja
xC
allback.min.js

Cependant, pour pleinement en exploiter les bénéfices, il serait
préférable d'avoir quelque chose du type :

https://cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/jquery.autosav
e.
js@spip-3.1.6/jquery.autosave.min.js

https://cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/jquery.placeho
ld
er-label.js@spip-3.1.6/jquery.placeholder-label.min.js">;

https://cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/ajaxCallback.j
s@
spip-3.1.6/ajaxCallback.min.js

ainsi, le chargement de ces librairies seraient "canonisées" pour
tous
les usagers de SPIP (ici 3.1.6, pas de tag spip-3.1.7 sur le dépot
Github SPIP).

Pour les éventuels utilisateurs de mod_pagespeed, l'ajout des lignes
suivantes à pagespeed.conf suffit pour activer la
"canonisation" sans
toucher aux squelettes:

##Librairies disponibles sur jsdelivr.net

ModPagespeedLibrary 19531 6GKok1X3WdAPsjnOlsZ6G \
cdn.jsdelivr.net/npm/jquery-form@3.50.0/jquery.form.min.js

ModPagespeedLibrary 1801 h-wYRZaviFW7fMplVK8sH \
cdn.jsdelivr.net/npm/jquery.cookie@1.4.1/jquery.cookie.min.js

##Librairies disponibles sur jsdeliver.net par le biais de mes dépots
Github

ModPagespeedLibrary 741 Ppl_Ry-HtT_ZvQ-n3zm_Q \
cdn.jsdelivr.net/gh/opalesurfcasting/jquery.autosave@v1.0/jquery.a
ut
osave.min.js

ModPagespeedLibrary 1074 y25eNqWaxVpFF5D96VREu \
cdn.jsdelivr.net/gh/opalesurfcasting/jquery.placeholder-label@v1.0
/j
query.placeholder-label.min.js

ModPagespeedLibrary 21074 NvlVPCOPnd86d229dLuoo \
//cdn.jsdelivr.net/gh/opalesurfcasting/ajaxCallback.js@v1.0/a
ja
xCallback.min.js

# remplacer par celles disponibles sur le dépot Github de spip pour
plus de mutualisation

ModPagespeedLibrary 741 Ppl_Ry-HtT_ZvQ-n3zm_Q \
cdn.jsdelivr.net/gh/
spip/SPIP/prive/javascript/jquery.autosave@spip-3.1.6/jquery.autosave
.m
in.js

ModPagespeedLibrary 1074 y25eNqWaxVpFF5D96VREu \
cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/jquery.placeholder-
la
bel@spip-3.1.6/jquery.placeholder-label.min.js

ModPagespeedLibrary 21074 NvlVPCOPnd86d229dLuoo \
//cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/ajaxCallback
.j
s@spip-3.1.6/ajaxCallback.min.js

Bien entendu plus il y aura d'utilisateur, plus le bénéfice pour
chacun
sera intéressant.

Seul, cela ne sert à rien.

Qu'en pensez vous ?

Cordialement,

Eric

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Bonsoir,

Je viens de passer à Spip 3.2 .

La fonction ci-dessous fonctionne parfaitement (canonise_f_jquery).

<script src="//cdn.jsdelivr.net/gh/spip/SPIP@spip-3.2.0/prive/javascrip
t/jquery.min.js" type="text/javascript"></script>
<script src="//cdn.jsdelivr.net/combine/gh/spip/SPIP@spip-3.2.0/prive/j
avascript/jquery-migrate-3.0.1.min.js,gh/spip/SPIP@spip-3.2.0/prive/jav
ascript/jquery.form.min.js,gh/spip/SPIP@spip-3.2.0/prive/javascript/jqu
ery.autosave.min.js,gh/spip/SPIP@spip-3.2.0/prive/javascript/jquery.pla
ceholder-label.min.js,gh/spip/SPIP@spip-3.2.0/prive/javascript/ajaxCall
back.min.js,gh/spip/SPIP@spip-3.2.0/prive/javascript/js.cookie.min.js,g
h/spip/SPIP@spip-3.2.0/prive/javascript/jquery.cookie.min.js"
type="text/javascript"></script>

Cordialement,

Eric

Le samedi 23 décembre 2017 à 03:33 +0100, eric a écrit :

Bonsoir,

Pour canoniser/mutualiser les javascripts jquery (https://www.jsdeliv
r.
com/package/gh/spip/SPIP), dans mes_options.php :

//remplacer f_jQuery par canonise_f_jQuery
$GLOBALS['spip_pipeline']['insert_head'] .= '|canonise_f_jQuery';

/**
* Canoniser les appels jQuery
*
* La fonction modifie les urls des scripts jQuery
* ainsi que celles de certains de ses plugins pour les remplacer par
* celles des fichiers disponibles sur Github, en respectant
* le versionning de SPIP.
*
* Cette fonction fait appel au service cdn.jsdeliver.net qui
* rend possible la canonisation des dépôts github.
*
* La liste des js chargés peut être complétée par le pipeline
* 'jquery_plugins'.
*
* Cette fonction est appelée par le pipeline insert_head
* après f_Jquery().
*
* Elle ne concerne donc que les javascripts indispensables ou
* injectés par le webmaster/développeur
*
* @see f_jQuery()
*
* @pipeline insert_head
* @pipeline_appel jquery_plugins
*
* @param string $texte Contenu qui sera inséré dans le head HTML
* @return string Contenu qui sera inséré dans le head HTML
**/
function canonise_f_jQuery($texte)
{
$x = '';
$y = '';
//Version de spip - tag - Release Github
$version_release_github = "spip-" .
$GLOBALS['spip_version_branche'];
$domain_cdn = "//cdn.jsdelivr.net/";
$prefix_cdn_combine = "combine/";
$folder_cdn = "gh/spip/SPIP" . "@" . $version_release_github .
"/";
$regex = "/< *script[^>]*src *= *[\"\']?([^\"\']*)/i";
preg_match_all($regex, $texte, $resultats);
if (isset($resultats[1])) {
$i = 0;
$len = count($resultats[1]);
foreach (array_unique($resultats[1]) as $script) {
$script = strtok($script, '?');
if ($script = find_in_path($script)) { //abandonne si le
script n'est pas présent dans les fichiers originaux SPIP.
$script = str_replace(".js", ".min.js", $script);
if ($script === "prive/javascript/jquery.min.js") {
//à
part, utilise ce filtre + canonise avec mod_pagespeed, sinon utilise
cdn.jsdelivr.net
$script = $domain_cdn . $folder_cdn . $script;
$x .= "\n<script src=\"$script\"
type=\"text/javascript\"></script>\n";
} else if ($i < $len -1) {
$y .= $folder_cdn . $script . ",";
} else {
$y .= $folder_cdn . $script;
}
}
$i++;
}
$y = $domain_cdn . $prefix_cdn_combine . $y;
$y = "\n<script src=\"$y\"
type=\"text/javascript\"></script>\n";
}
$texte = $x . $y; // return text, if nothing is found, use
default
SPIP jQuery files

return $texte;

}

Si cela en intéresse quelques uns ...
Cela peut être améliorer ...
Est ce la bonne méthode ?

Cordialement,

Eric

Le vendredi 01 décembre 2017 à 18:42 +0100, eric a écrit :
>
> Désolé pour le bruit, j'ai un peu de mal avec la liste.
>
> --
>
> Bonjour,
>
> J'utilise SPIP 3.1.7 associé à mod_pagespeed pour optimiser les
> images
> ...
>
> Je teste l'utilisation canoniques des javascript suivants :
>
> <script src="squelettes/javascript/jquery-1.12.4.js"></script>
> <script src="squelettes/javascript/jquery.form-3.51.0.js"></script>
> <script src="squelettes/javascript/jquery.autosave.js"></script>
> <script src="squelettes/javascript/jquery.placeholder-
> label.js"></script>
> <script src="squelettes/javascript/ajaxCallback.js"></script>
> <script src="squelettes/javascript/jquery.cookie.js"></script>
>
> Avec le filtre "ModPagespeedEnableFilters
> canonicalize_javascript_libraries", mod_pagespeed identifie les
> librairies disponibles sur Googleapi et incluse dans les squelettes
> (le
> html), et canonise "automatiquement" celles qu'il connait.
>
> Par exemple :
>
> <script src="squelettes/javascript/jquery-1.12.4.js"></script>
>
> devient :
>
> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jq
> ue
> ry
> .min.js"></script>; ;
>
> Ce qui permet d'obtenir une réponse 304 si le visiteur du site a
> déjà
> visité un site avec cette librairie. Ce qui est fort propable et
> évite
> donc son téléchargement.
>
> Sans mod_pagespeed, il suffit d'inclure directement l'URL https://
> aj
> ax
> .googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js .
>
> Pour :
>
> squelettes/javascript/jquery.form-3.51.0.js il y a https://cdn.js
> de
> li
> vr.net/npm/jquery-form@3.50.0/jquery.form.min.js
>
> squelettes/javascript/jquery.cookie.js il y a https://cdn.jsdelivr.
> ne
> t/
> npm/jquery.cookie@1.4.1/jquery.cookie.min.js
>
> Cela fait 3 des 6 librairies disponibles sur CDN.
>
> Il manque/manquait :
>
> squelettes/javascript/jquery.autosave.js
>
> squelettes/javascript/jquery.placeholder-label.js
>
> squelettes/javascript/ajaxCallback.js
>
> Ces librairies sont disponibles maintenant aux adresses :
>
> https://cdn.jsdelivr.net/gh/opalesurfcasting/jquery.autosave@v1.0/j
> qu
> er
> y.autosave.min.js
>
> https://cdn.jsdelivr.net/gh/opalesurfcasting/jquery.placeholder-lab
> el
> @v
> 1.0/jquery.placeholder-label.min.js">
>
> https://cdn.jsdelivr.net/gh/opalesurfcasting/ajaxCallback.js@v1.0/a
> ja
> xC
> allback.min.js
>
> Cependant, pour pleinement en exploiter les bénéfices, il serait
> préférable d'avoir quelque chose du type :
>
> https://cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/jquery.autos
> av
> e.
> js@spip-3.1.6/jquery.autosave.min.js
>
> https://cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/jquery.place
> ho
> ld
> er-label.js@spip-3.1.6/jquery.placeholder-label.min.js">;
>
> https://cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/ajaxCallback
> .j
> s@
> spip-3.1.6/ajaxCallback.min.js
>
>
> ainsi, le chargement de ces librairies seraient "canonisées" pour
> tous
> les usagers de SPIP (ici 3.1.6, pas de tag spip-3.1.7 sur le
> dépot
> Github SPIP).
>
> Pour les éventuels utilisateurs de mod_pagespeed, l'ajout des
> lignes
> suivantes à pagespeed.conf suffit pour activer la
> "canonisation" sans
> toucher aux squelettes:
>
> ##Librairies disponibles sur jsdelivr.net
>
> ModPagespeedLibrary 19531 6GKok1X3WdAPsjnOlsZ6G \
> cdn.jsdelivr.net/npm/jquery-form@3.50.0/jquery.form.min.js
>
> ModPagespeedLibrary 1801 h-wYRZaviFW7fMplVK8sH \
> cdn.jsdelivr.net/npm/jquery.cookie@1.4.1/jquery.cookie.min.js
>
> ##Librairies disponibles sur jsdeliver.net par le biais de mes
> dépots
> Github
>
> ModPagespeedLibrary 741 Ppl_Ry-HtT_ZvQ-n3zm_Q \
> cdn.jsdelivr.net/gh/opalesurfcasting/jquery.autosave@v1.0/jquery
> .a
> ut
> osave.min.js
>
> ModPagespeedLibrary 1074 y25eNqWaxVpFF5D96VREu \
> cdn.jsdelivr.net/gh/opalesurfcasting/jquery.placeholder-label@v1
> .0
> /j
> query.placeholder-label.min.js
>
> ModPagespeedLibrary 21074 NvlVPCOPnd86d229dLuoo \
> //cdn.jsdelivr.net/gh/opalesurfcasting/ajaxCallback.js@v1.0
> /a
> ja
> xCallback.min.js
>
> # remplacer par celles disponibles sur le dépot Github de spip
> pour
> plus de mutualisation
>
> ModPagespeedLibrary 741 Ppl_Ry-HtT_ZvQ-n3zm_Q \
> cdn.jsdelivr.net/gh/
> spip/SPIP/prive/javascript/jquery.autosave@spip-3.1.6/jquery.autosa
> ve
> .m
> in.js
>
> ModPagespeedLibrary 1074 y25eNqWaxVpFF5D96VREu \
> cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/jquery.placeholde
> r-
> la
> bel@spip-3.1.6/jquery.placeholder-label.min.js
>
> ModPagespeedLibrary 21074 NvlVPCOPnd86d229dLuoo \
> //cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/ajaxCallba
> ck
> .j
> s@spip-3.1.6/ajaxCallback.min.js
>
> Bien entendu plus il y aura d'utilisateur, plus le bénéfice pour
> chacun
> sera intéressant.
>
> Seul, cela ne sert à rien.
>
> Qu'en pensez vous ?
>
> Cordialement,
>
> Eric
>
>
> _______________________________________________
> liste spip
> spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.ne
> t
>
> Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html
>
> Infos : http://listes.rezo.net/mailman/listinfo/spip
>
> Documentation de SPIP : http://www.spip.net/
>
> Irc : de l'aide à toute heure : http://spip.net/irc
_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Le 17/01/2018 à 04:03, eric a écrit :

Je viens de passer à Spip 3.2 .
La fonction ci-dessous fonctionne parfaitement (canonise_f_jquery).

Pour partager ton code, le mieux serait de rédiger un article
sur contrib.spip.net avec le code du filtre et des exemples d'utilisation,
et éventuellement de proposer le filtre sous forme d'un plugin.

Il faudrait expliquer les limites du procédé :
- le fait qu'il est dommage d'accroitre notre dépendance aux gafam,
- selon les cas, l'option de compaction des js proposée par SPIP,
+ les caches de spip ou de l'hébergeur (varnish)
+ les diverses techniques d'optimisations peuvent être plus efficaces
que ces cdn.

JL

<script src="//cdn.jsdelivr.net/gh/spip/SPIP@spip-3.2.0/prive/javascrip
t/jquery.min.js" type="text/javascript"></script>
<script src="//cdn.jsdelivr.net/combine/gh/spip/SPIP@spip-3.2.0/prive/j
avascript/jquery-migrate-3.0.1.min.js,gh/spip/SPIP@spip-3.2.0/prive/jav
ascript/jquery.form.min.js,gh/spip/SPIP@spip-3.2.0/prive/javascript/jqu
ery.autosave.min.js,gh/spip/SPIP@spip-3.2.0/prive/javascript/jquery.pla
ceholder-label.min.js,gh/spip/SPIP@spip-3.2.0/prive/javascript/ajaxCall
back.min.js,gh/spip/SPIP@spip-3.2.0/prive/javascript/js.cookie.min.js,g
h/spip/SPIP@spip-3.2.0/prive/javascript/jquery.cookie.min.js"
type="text/javascript"></script>

Cordialement,

Eric

Le samedi 23 décembre 2017 à 03:33 +0100, eric a écrit :

Bonsoir,

Pour canoniser/mutualiser les javascripts jquery (https://www.jsdeliv
r.
com/package/gh/spip/SPIP), dans mes_options.php :

//remplacer f_jQuery par canonise_f_jQuery
$GLOBALS['spip_pipeline']['insert_head'] .= '|canonise_f_jQuery';

/**
* Canoniser les appels jQuery
*
* La fonction modifie les urls des scripts jQuery
* ainsi que celles de certains de ses plugins pour les remplacer par
* celles des fichiers disponibles sur Github, en respectant
* le versionning de SPIP.
*
* Cette fonction fait appel au service cdn.jsdeliver.net qui
* rend possible la canonisation des dépôts github.
*
* La liste des js chargés peut être complétée par le pipeline
* 'jquery_plugins'.
*
* Cette fonction est appelée par le pipeline insert_head
* après f_Jquery().
*
* Elle ne concerne donc que les javascripts indispensables ou
* injectés par le webmaster/développeur
*
* @see f_jQuery()
*
* @pipeline insert_head
* @pipeline_appel jquery_plugins
*
* @param string $texte Contenu qui sera inséré dans le head HTML
* @return string Contenu qui sera inséré dans le head HTML
**/
function canonise_f_jQuery($texte)
{
$x = '';
$y = '';
//Version de spip - tag - Release Github
$version_release_github = "spip-" .
$GLOBALS['spip_version_branche'];
$domain_cdn = "//cdn.jsdelivr.net/";
$prefix_cdn_combine = "combine/";
$folder_cdn = "gh/spip/SPIP" . "@" . $version_release_github .
"/";
$regex = "/< *script[^>]*src *= *[\"\']?([^\"\']*)/i";
preg_match_all($regex, $texte, $resultats);
if (isset($resultats[1])) {
$i = 0;
$len = count($resultats[1]);
foreach (array_unique($resultats[1]) as $script) {
$script = strtok($script, '?');
if ($script = find_in_path($script)) { //abandonne si le
script n'est pas présent dans les fichiers originaux SPIP.
$script = str_replace(".js", ".min.js", $script);
if ($script === "prive/javascript/jquery.min.js") {
//à
part, utilise ce filtre + canonise avec mod_pagespeed, sinon utilise
cdn.jsdelivr.net
$script = $domain_cdn . $folder_cdn . $script;
$x .= "\n<script src=\"$script\"
type=\"text/javascript\"></script>\n";
} else if ($i < $len -1) {
$y .= $folder_cdn . $script . ",";
} else {
$y .= $folder_cdn . $script;
}
}
$i++;
}
$y = $domain_cdn . $prefix_cdn_combine . $y;
$y = "\n<script src=\"$y\"
type=\"text/javascript\"></script>\n";
}
$texte = $x . $y; // return text, if nothing is found, use
default
SPIP jQuery files

 return $texte;

}

Si cela en intéresse quelques uns ...
Cela peut être améliorer ...
Est ce la bonne méthode ?

Cordialement,

Eric

Le vendredi 01 décembre 2017 à 18:42 +0100, eric a écrit :

Désolé pour le bruit, j'ai un peu de mal avec la liste.

--

Bonjour,

J'utilise SPIP 3.1.7 associé à mod_pagespeed pour optimiser les
images
...

Je teste l'utilisation canoniques des javascript suivants :

<script src="squelettes/javascript/jquery-1.12.4.js"></script>
<script src="squelettes/javascript/jquery.form-3.51.0.js"></script>
<script src="squelettes/javascript/jquery.autosave.js"></script>
<script src="squelettes/javascript/jquery.placeholder-
label.js"></script>
<script src="squelettes/javascript/ajaxCallback.js"></script>
<script src="squelettes/javascript/jquery.cookie.js"></script>

Avec le filtre "ModPagespeedEnableFilters
canonicalize_javascript_libraries", mod_pagespeed identifie les
librairies disponibles sur Googleapi et incluse dans les squelettes
(le
html), et canonise "automatiquement" celles qu'il connait.

Par exemple :

<script src="squelettes/javascript/jquery-1.12.4.js"></script>

devient :

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jq
ue
ry
.min.js"></script>; ;

Ce qui permet d'obtenir une réponse 304 si le visiteur du site a
déjà
visité un site avec cette librairie. Ce qui est fort propable et
évite
donc son téléchargement.

Sans mod_pagespeed, il suffit d'inclure directement l'URL https://
aj
ax
.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js .

Pour :

squelettes/javascript/jquery.form-3.51.0.js il y a https://cdn.js
de
li
vr.net/npm/jquery-form@3.50.0/jquery.form.min.js

squelettes/javascript/jquery.cookie.js il y a https://cdn.jsdelivr.
ne
t/
npm/jquery.cookie@1.4.1/jquery.cookie.min.js

Cela fait 3 des 6 librairies disponibles sur CDN.

Il manque/manquait :

squelettes/javascript/jquery.autosave.js

squelettes/javascript/jquery.placeholder-label.js

squelettes/javascript/ajaxCallback.js

Ces librairies sont disponibles maintenant aux adresses :

https://cdn.jsdelivr.net/gh/opalesurfcasting/jquery.autosave@v1.0/j
qu
er
y.autosave.min.js

https://cdn.jsdelivr.net/gh/opalesurfcasting/jquery.placeholder-lab
el
@v
1.0/jquery.placeholder-label.min.js">

https://cdn.jsdelivr.net/gh/opalesurfcasting/ajaxCallback.js@v1.0/a
ja
xC
allback.min.js

Cependant, pour pleinement en exploiter les bénéfices, il serait
préférable d'avoir quelque chose du type :

https://cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/jquery.autos
av
e.
js@spip-3.1.6/jquery.autosave.min.js

https://cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/jquery.place
ho
ld
er-label.js@spip-3.1.6/jquery.placeholder-label.min.js">;

https://cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/ajaxCallback
.j
s@
spip-3.1.6/ajaxCallback.min.js

ainsi, le chargement de ces librairies seraient "canonisées" pour
tous
les usagers de SPIP (ici 3.1.6, pas de tag spip-3.1.7 sur le
dépot
Github SPIP).

Pour les éventuels utilisateurs de mod_pagespeed, l'ajout des
lignes
suivantes à pagespeed.conf suffit pour activer la
"canonisation" sans
toucher aux squelettes:

##Librairies disponibles sur jsdelivr.net

ModPagespeedLibrary 19531 6GKok1X3WdAPsjnOlsZ6G \
cdn.jsdelivr.net/npm/jquery-form@3.50.0/jquery.form.min.js

ModPagespeedLibrary 1801 h-wYRZaviFW7fMplVK8sH \
cdn.jsdelivr.net/npm/jquery.cookie@1.4.1/jquery.cookie.min.js

##Librairies disponibles sur jsdeliver.net par le biais de mes
dépots
Github

ModPagespeedLibrary 741 Ppl\_Ry\-HtT\_ZvQ\-n3zm\_Q \\
cdn\.jsdelivr\.net/gh/opalesurfcasting/jquery\.autosave@v1\.0/jquery

.a
ut
osave.min.js

ModPagespeedLibrary 1074 y25eNqWaxVpFF5D96VREu \\
cdn\.jsdelivr\.net/gh/opalesurfcasting/jquery\.placeholder\-label@v1

.0
/j
query.placeholder-label.min.js

ModPagespeedLibrary 21074 NvlVPCOPnd86d229dLuoo \
//cdn.jsdelivr.net/gh/opalesurfcasting/ajaxCallback.js@v1.0
/a
ja
xCallback.min.js

# remplacer par celles disponibles sur le dépot Github de spip
pour
plus de mutualisation

ModPagespeedLibrary 741 Ppl_Ry-HtT_ZvQ-n3zm_Q \
cdn.jsdelivr.net/gh/
spip/SPIP/prive/javascript/jquery.autosave@spip-3.1.6/jquery.autosa
ve
.m
in.js

ModPagespeedLibrary 1074 y25eNqWaxVpFF5D96VREu \\
cdn\.jsdelivr\.net/gh/spip/SPIP/prive/javascript/jquery\.placeholde

r-
la
bel@spip-3.1.6/jquery.placeholder-label.min.js

ModPagespeedLibrary 21074 NvlVPCOPnd86d229dLuoo \
//cdn.jsdelivr.net/gh/spip/SPIP/prive/javascript/ajaxCallba
ck
.j
s@spip-3.1.6/ajaxCallback.min.js

Bien entendu plus il y aura d'utilisateur, plus le bénéfice pour
chacun
sera intéressant.

Seul, cela ne sert à rien.

Qu'en pensez vous ?

Cordialement,

Eric

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.ne
t

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Bonjour,

Pour partager ton code, le mieux serait de rédiger un article
sur contrib.spip.net avec le code du filtre et des exemples
d'utilisation,
et éventuellement de proposer le filtre sous forme d'un plugin.

Je vais essayer le plugin.

Cordialement,

Eric

PS : je ne comprends pas trop le problème concernant l'usage d'un CDN ?

La licence de jsdelivr ?

Bonjour

PS : je ne comprends pas trop le problème concernant l'usage d'un CDN ?

L'usage des CDN a des avantages et des inconvénients.
Jluc a déjà résumé ces points. On pourrait sûrement développer un peu
plus ceux ci.

Je dirais que l'inconvénient qui semble le plus fort (si on regarde du
point de vue de l'état d'esprit SPIP), c'est la dépendance à un
service tiers.
Ce tiers, le CDN, n'est pas obligatoirement de confiance.

La définition de cette "confiance" est relative, on peut ne pas être
d'accord dans son qu'on met dedans.
On peut noter que l'usage d'un CDN externe implique une contrepartie
dans le pistage des visiteurs. Le CDN sait quel visiteur va sur quels
sites et quand. Est ce une information qu'on souhaite transmettre ?

On peut aussi noter d'autres inconvénients possibles comme le
dysfonctionnement du service et fournir un site à moitié fonctionnel,
des optimisations non maîtrisées ayant parfois des effets de bords
(concaténation agressive d'un script changeant son comportement).

On note bien sûr aussi des avantages :slight_smile:
C'est un curseur à mettre en fonction des cas de figure rencontrés.

Km

Le 17 janvier 2018 à 13:46, eric <webmaster@opalesurfcasting.net> a écrit :

Bonjour,

Pour partager ton code, le mieux serait de rédiger un article
sur contrib.spip.net avec le code du filtre et des exemples
d'utilisation,
et éventuellement de proposer le filtre sous forme d'un plugin.

Je vais essayer le plugin.

Cordialement,

Eric

La licence de jsdelivr ?

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

--
------------
-----
http://www.azerttyu.net (hébergement)
http://km.azerttyu.net (blog)
cam.lafit@azerttyu.net