[SPIP Zone] r103978 - in _plugins_/oembed

spip-zone-commit@rezo.net a écrit le 17/04/2017 à 13:21 :

Author: cedric@yterium.com
Date: 2017-04-17 13:21:17 +0200 (Mon, 17 Apr 2017)
New Revision: 103978

Modified:
    _plugins_/oembed/css/oembed.css
    _plugins_/oembed/modeles/toot.html
    _plugins_/oembed/oembed_pipelines.php
    _plugins_/oembed/paquet.xml
Log:
fix bug html sur le modele toot.html, et petites ameliorations css + timestamp sur la css inseree par le pipeline

Details: Connexion · GitLab

Sauf erreur, le timestamp rajoute un ?123456 à l'URL
Et ça empêche le cache navigateur.

Ça me rapelle : #PRODUIRE ne tien pas compte de marqueur et marqueur_skel (#3696) · Tickets · spip / spip · GitLab

--
RealET

RealET a écrit :
> Sauf erreur, le timestamp rajoute un ?123456 à l'URL
> Et ça empêche le cache navigateur.

D'où sort cette affirmation péremptoire ? Quelles sont tes sources, tes références ? Ton expérience ?

C'est pure calomnie et imagination, ça fait à peu près 5 ans qu'on utilise des timestamp partout et autant que possible pour améliorer la gestion des caches et c'est pas une lubie qui m'est passée comme ça.

Moi je te dis que ça empêche aucun cache dans les navigateurs, et ça permet au contraire une mise à jour du cache du navigateur lorsque le fichier source est modifié sur le serveur, puisque son URL change.

Ceci entraine la possibilité de mettre des Expires long sur ces fichiers statiques, puisque du coup on aura bien une mise à jour des ressources chez les utilisateurs si on change le contenu.

Certes l'idéal serait de mettre non pas un timestamp mais un hash du contenu, pour éviter que le cache soit invalidé lorsque la date de la ressource change mais pas son contenu, mais cela a un impact fort sur la perf côté serveur.

C'est quelque chose de possible avec des préprocesseur de type gulp/grunt qui compilent les ressources, mais pas réaliste pour être réalisé dans un squelette donc le calcul peut intervenir assez souvent.

Il y en a ici qui ont travaillé sérieusement sur le sujet, pris la peine de tester, d'évaluer, de chercher les meilleurs compromis, ça serait bien de pas préjuger que par défaut on ne sait pas ce qu'on fait et de lancer des affirmations qui sortent de nulle part.

Le seul défaut connu des timestamp c'est qu'ils sont pas forcément bien gérés par certains vieux proxy d'entreprise qui — eux — ne sauront pas les cacher. Mais dans la mesure où les navigateurs font bien le job, c'est pas trop grave.
Et c'est un choix conscient, délibéré et éclairé.

--
Cédric

Cédric Morin a écrit le 19/04/2017 à 12:38 :

RealET a écrit :
> Sauf erreur, le timestamp rajoute un ?123456 à l'URL
> Et ça empêche le cache navigateur.

D'où sort cette affirmation péremptoire ? Quelles sont tes sources, tes références ? Ton expérience ?

C'est pure calomnie et imagination, ça fait à peu près 5 ans qu'on utilise des timestamp partout et autant que possible pour améliorer la gestion des caches et c'est pas une lubie qui m'est passée comme ça.

Moi je te dis que ça empêche aucun cache dans les navigateurs, et ça permet au contraire une mise à jour du cache du navigateur lorsque le fichier source est modifié sur le serveur, puisque son URL change.

Ceci entraine la possibilité de mettre des Expires long sur ces fichiers statiques, puisque du coup on aura bien une mise à jour des ressources chez les utilisateurs si on change le contenu.

Certes l'idéal serait de mettre non pas un timestamp mais un hash du contenu, pour éviter que le cache soit invalidé lorsque la date de la ressource change mais pas son contenu, mais cela a un impact fort sur la perf côté serveur.

C'est quelque chose de possible avec des préprocesseur de type gulp/grunt qui compilent les ressources, mais pas réaliste pour être réalisé dans un squelette donc le calcul peut intervenir assez souvent.

Il y en a ici qui ont travaillé sérieusement sur le sujet, pris la peine de tester, d'évaluer, de chercher les meilleurs compromis, ça serait bien de pas préjuger que par défaut on ne sait pas ce qu'on fait et de lancer des affirmations qui sortent de nulle part.

Le seul défaut connu des timestamp c'est qu'ils sont pas forcément bien gérés par certains vieux proxy d'entreprise qui — eux — ne sauront pas les cacher. Mais dans la mesure où les navigateurs font bien le job, c'est pas trop grave.
Et c'est un choix conscient, délibéré et éclairé.

Source :
https://gtmetrix.com/reports/contrib.spip.net/cpoS8b6o
Remove query strings from static resources
A (91)
    CONTENT LOW
What's this mean?
Resources with a "?" in the URL are not cached by some proxy caching servers. Remove the query string and encode the parameters into the URL for the following resources:

https://contrib.spip.net/local/cache-css/717aefa0d1984cadd3c60a043269fbd7.css?1492461258
https://static-contrib.spip.net/local/cache-gd2/12/1ec07eb3cf4d83916bc7129e7a2e8c.png?1460282585
https://static-contrib.spip.net/local/cache-gd2/37/fad67bcecf0853e51839e7c8a6f3f3.png?1491688038
https://static-contrib.spip.net/local/cache-gd2/62/529e27f4575bd751625bb7cb913997.png?1491730400
https://static-contrib.spip.net/local/cache-gd2/7d/de0d45976aa02bdaa58b38e96ba784.png?1488809785
https://static-contrib.spip.net/local/cache-gd2/9a/97196a33762497de03bb8dd3fcc2f4.png?1491775869
https://static-contrib.spip.net/local/cache-gd2/a5/be592861bfc0c774f75198c7682a03.png?1483641628
https://static-contrib.spip.net/local/cache-gd2/f2/3a23112ace4247f26d1d2dd5803f99.png?1490647349
https://static-contrib.spip.net/local/cache-vignettes/L214xH160/4643610a33b432b6-2b7b8.png?1393498723

https://gtmetrix.com/remove-query-strings-from-static-resources.html

cache - URL with query disables caching? - Webmasters Stack Exchange indique que ça peut aussi poser problème avec FireFox

Mais Caching resources with query strings - BizCoder montre effectivement que le problème de Squid est réglé par défaut depuis sa version de 2008.

Ici, je vois une idée que je trouve intéressante (via .htaccess)
au lieu de mettre un paramètre dans l'url, la valeur est lise directement dans le nom du fichier, et le htaccess fait que la valeur est ignorée.

# ------------------------------------------------------------------------------
# | Filename-based cache busting |
# ------------------------------------------------------------------------------

# If you're not using a build process to manage your filename version revving,
# you might want to consider enabling the following directives to route all
# requests such as `/css/style.12345.css` to `/css/style.css`.

# To understand why this is important and a better idea than `*.css?v231`, read:
# Revving Filenames: don’t use querystring | High Performance Web Sites

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpe?g|gif)$ $1.$3 [L]
</IfModule>
In this way a request for foo.123.css is processed by the server as foo.css - this has all the advantages of using a query parameter for cache busting, but without the problem of disabling proxy caching.

Bref, je te remercie de m'avoir poussé à chercher plus avant car grâce à toi, j'ai trouvé une idée qui me semble allier le meilleur :
- un nom de fichier sur le disque qui ne change pas
- une url qui change
- un .htaccess qui fait la correspondance

Donc, est-ce que ça serait une idée de rajouter un define utilisé par la fonction timestamp qui mettrait la valeur dans le nom du fichier au lieu que ce soit en paramètre d'URL ?

Qu'en dis-tu ?

--
RealET

Le 19 avril 2017 à 14:00, RealET a écrit :

Cédric Morin a écrit le 19/04/2017 à 12:38 :

[...]

Moi je te dis que ça empêche aucun cache dans les navigateurs, et ça

permet au contraire une mise à jour du cache du navigateur lorsque le
fichier source est modifié sur le serveur, puisque son URL change.

[...]

Le seul défaut connu des timestamp c'est qu'ils sont pas forcément bien

gérés par certains vieux proxy d'entreprise qui — eux — ne sauront pas les
cacher. Mais dans la mesure où les navigateurs font bien le job, c'est pas
trop grave.
Et c'est un choix conscient, délibéré et éclairé.

Source :

https://gtmetrix.com/reports/contrib.spip.net/cpoS8b6o
Remove query strings from static resources
A (91)
        CONTENT LOW
What's this mean?
Resources with a "?" in the URL are not cached by some proxy caching
servers.

Ce n'est pas différent du dernier paragraphe de Cédric si ?
La question serait alors de savoir quelle est la proportion de ces "vieux
proxy"

[...]

cache - URL with query disables caching? - Webmasters Stack Exchange
with-query-disables-caching indique que ça peut aussi poser problème avec
FireFox

2014... Toujours d'actualité ?

Mais Caching resources with query strings - BizCoder montre
effectivement que le problème de Squid est réglé par défaut depuis sa
version de 2008.

Ici, je vois une idée que je trouve intéressante (via .htaccess)
au lieu de mettre un paramètre dans l'url, la valeur est lise directement
dans le nom du fichier, et le htaccess fait que la valeur est ignorée.
javascript - File Caching: Query string vs Last-Modified? - Stack Overflow
query-string-vs-last-modified
# ------------------------------------------------------------
------------------
# | Filename-based cache busting |
# ------------------------------------------------------------
------------------

# If you're not using a build process to manage your filename version
revving,
# you might want to consider enabling the following directives to route all
# requests such as `/css/style.12345.css` to `/css/style.css`.

# To understand why this is important and a better idea than `*.css?v231`,
read:
# Revving Filenames: don’t use querystring | High Performance Web Sites
nt-use-querystring

<IfModule mod_rewrite.c>
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpe?g|gif)$ $1.$3 [L]
</IfModule>
In this way a request for foo.123.css is processed by the server as
foo.css - this has all the advantages of using a query parameter for cache
busting, but without the problem of disabling proxy caching.

Bref, je te remercie de m'avoir poussé à chercher plus avant car grâce à
toi, j'ai trouvé une idée qui me semble allier le meilleur :
- un nom de fichier sur le disque qui ne change pas
- une url qui change
- un .htaccess qui fait la correspondance

Donc, est-ce que ça serait une idée de rajouter un define utilisé par la
fonction timestamp qui mettrait la valeur dans le nom du fichier au lieu
que ce soit en paramètre d'URL ?

Qu'en dis-tu ?

RealET a écrit :

Source :
...
Resources with a "?" in the URL are not cached by some proxy caching

C'est exactement ce que j'ai dit, on le sait, rien de nouveau

cache - URL with query disables caching? - Webmasters Stack Exchange
indique que ça peut aussi poser problème avec FireFox

indique qu'il peut y avoir des collisions de cache sur les ressources dont le nom diffère très peu, sur les derniers caractères uniquement.
Ça n'a rien a voir avec une perte de cache, c'est limité, et dans notre cas ce n'est pas du tout gênant puisque 2 ressources qui diffèrent uniquement par le timestamp sont en fait 2 ressources qui n'existent pas à un même moment dans le site. Le fait que la dernière écrase le cache de la précédente ne peut poser des problèmes que dans des use-case très limité et temporaire.

C'est un faux problème dans notre cas (et de l'info super fraiche d'il y a 4 ans)

Ici, je vois une idée que je trouve intéressante (via .htaccess)
au lieu de mettre un paramètre dans l'url, la valeur est lise
directement dans le nom du fichier, et le htaccess fait que la valeur
est ignorée.
javascript - File Caching: Query string vs Last-Modified? - Stack Overflow

Bref, je te remercie de m'avoir poussé à chercher plus avant car grâce à
toi, j'ai trouvé une idée qui me semble allier le meilleur :

Merci, c'est gentil de continuer à présumer que tout le boulot qu'on fait est purement hasardeux et qu'on a pas fait ce travail de recherche en amont (que je t'ai forcé à faire ici pour documenter ton affirmation gratuite)

Oui, l'insertion d'un timestamp dans le nom du fichier combiné avec une réécriture par htaccess est meilleure que le simple timestamp en query-string.
Je fais ça sur les sites pour lesquels je veux les meilleures webperf possibles et quand je maitrise l'environnement, et il y a tout ce qu'il faut pour le gérer avec SPIP.

Mais encore une fois il faut distinguer l'optimum que tu peux atteindre dans une solution sur-mesure et le meilleur compromis possible que tu peux utiliser dans du code qui sera mis entre toutes les mains, à des niveaux de compétences divers, et dans des environnements logiciels tout aussi divers.

En tenant compte de toutes les contraintes, notamment que tous les hebergeurs ne supportent pas les htaccess (certains pour des raisons de secu, d'autre parce que nginx au lieu de apache etc…), le timestamp en query-string est une bonne pratique, qu'il faut appliquer.
D'autant plus qu'elle est ensuite facilement upgradable :
* avec une fonction qui transforme tous les .xxx?12345 en .12345.xxx sur la sortie de SPIP
* et une règle htaccess

Et je te rappelle qu'on ton mail initial était de la forme "ton truc ça marche pas ça casse tout", sans aucune argumentation ni justification, et que c'est vraiment pénible comme attitude.

Soit tu as des éléments tangibles et tu fais un mail de discussion étayé, soit tu n'en sais rien et tu poses la question.

Mais ce genre de mail affirmatif-erroné ne fait que générer du bruit, et ensuite quelqu'un (toi par exemple) le ressort plusieurs mois ou années plus tard en le prenant pour argent comptant "là il dit que ça casse tout et personne n'a contesté".

Cédric

Cédric Morin a écrit le 19/04/2017 à 15:08 :

RealET a écrit :

Source :
...
Resources with a "?" in the URL are not cached by some proxy caching

C'est exactement ce que j'ai dit, on le sait, rien de nouveau

cache - URL with query disables caching? - Webmasters Stack Exchange

indique que ça peut aussi poser problème avec FireFox

indique qu'il peut y avoir des collisions de cache sur les ressources dont le nom diffère très peu, sur les derniers caractères uniquement.
Ça n'a rien a voir avec une perte de cache, c'est limité, et dans notre cas ce n'est pas du tout gênant puisque 2 ressources qui diffèrent uniquement par le timestamp sont en fait 2 ressources qui n'existent pas à un même moment dans le site. Le fait que la dernière écrase le cache de la précédente ne peut poser des problèmes que dans des use-case très limité et temporaire.

C'est un faux problème dans notre cas (et de l'info super fraiche d'il y a 4 ans)

Ici, je vois une idée que je trouve intéressante (via .htaccess)
au lieu de mettre un paramètre dans l'url, la valeur est lise
directement dans le nom du fichier, et le htaccess fait que la valeur
est ignorée.
javascript - File Caching: Query string vs Last-Modified? - Stack Overflow

Bref, je te remercie de m'avoir poussé à chercher plus avant car grâce à
toi, j'ai trouvé une idée qui me semble allier le meilleur :

Merci, c'est gentil de continuer à présumer que tout le boulot qu'on fait est purement hasardeux et qu'on a pas fait ce travail de recherche en amont (que je t'ai forcé à faire ici pour documenter ton affirmation gratuite)

Oui, l'insertion d'un timestamp dans le nom du fichier combiné avec une réécriture par htaccess est meilleure que le simple timestamp en query-string.
Je fais ça sur les sites pour lesquels je veux les meilleures webperf possibles et quand je maitrise l'environnement, et il y a tout ce qu'il faut pour le gérer avec SPIP.

Mais encore une fois il faut distinguer l'optimum que tu peux atteindre dans une solution sur-mesure et le meilleur compromis possible que tu peux utiliser dans du code qui sera mis entre toutes les mains, à des niveaux de compétences divers, et dans des environnements logiciels tout aussi divers.

En tenant compte de toutes les contraintes, notamment que tous les hebergeurs ne supportent pas les htaccess (certains pour des raisons de secu, d'autre parce que nginx au lieu de apache etc…), le timestamp en query-string est une bonne pratique, qu'il faut appliquer.
D'autant plus qu'elle est ensuite facilement upgradable :
* avec une fonction qui transforme tous les .xxx?12345 en .12345.xxx sur la sortie de SPIP

Ah ?
Comment fais-tu ?
C'est dans un des codes que tu as publié ?

La fonction timestamp du core de SPIP n'ayant pas de _dist dans son nom, elle ne peut pas être modifiée.
Elle n'a pas de pipeline non plus.
Donc, tu passes par un #FILTRE ?
Ou par le pipeline affichage_final ?

* et une règle htaccess

Et je te rappelle qu'on ton mail initial était de la forme "ton truc ça marche pas ça casse tout", sans aucune argumentation ni justification, et que c'est vraiment pénible comme attitude.

Je suis désolé que tu le prennes comme ça.
Oui, il n'y avait pas de justification.
Mais je peux t'affirmer que je réagissais à cause de https://gtmetrix.com/remove-query-strings-from-static-resources.html dont je me souvenais.

Soit tu as des éléments tangibles et tu fais un mail de discussion étayé, soit tu n'en sais rien et tu poses la question.

OK, je prends note d'étayer pour la prochaine fois.

Mais ce genre de mail affirmatif-erroné ne fait que générer du bruit, et ensuite quelqu'un (toi par exemple) le ressort plusieurs mois ou années plus tard en le prenant pour argent comptant "là il dit que ça casse tout et personne n'a contesté".

Merci d'avoir contesté :wink:

--
RealET

RealET a écrit le 19/04/2017 à 16:10 :

D'autant plus qu'elle est ensuite facilement upgradable :
* avec une fonction qui transforme tous les .xxx?12345 en .12345.xxx sur la sortie de SPIP

Ah ?
Comment fais-tu ?
C'est dans un des codes que tu as publié ?

La fonction timestamp du core de SPIP n'ayant pas de _dist dans son nom, elle ne peut pas être modifiée.
Elle n'a pas de pipeline non plus.
Donc, tu passes par un #FILTRE ?
Ou par le pipeline affichage_final ?

Je suis passé par un #FILTRE.

Pour ceux que ça intéresse :

--
RealET

Le 20/04/2017 à 00:59, RealET a écrit :

* avec une fonction qui transforme tous les .xxx?12345 en .12345.xxx sur la sortie de SPIP

La fonction timestamp du core de SPIP n'ayant pas de _dist dans son nom, elle ne peut pas être modifiée.

Je suis passé par un #FILTRE
Connexion · GitLab

Attention il y a une erreur (double appel du #filtre mini_html dans

À part ça j'ai pas vu ton nouvel appel de #filtre
(mais il y a tellement de fichiers dans ce commits)
c'est où ?

JL

Le 20/04/2017 à 00:59, RealET a écrit :

RealET a écrit le 19/04/2017 à 16:10 :

D'autant plus qu'elle est ensuite facilement upgradable :
* avec une fonction qui transforme tous les .xxx?12345 en .12345.xxx sur la sortie de SPIP

Ah ?
Comment fais-tu ?
C'est dans un des codes que tu as publié ?

La fonction timestamp du core de SPIP n'ayant pas de _dist dans son nom, elle ne peut pas être modifiée.
Elle n'a pas de pipeline non plus.
Donc, tu passes par un #FILTRE ?
Ou par le pipeline affichage_final ?

Je suis passé par un #FILTRE.

Pour ceux que ça intéresse :
Connexion · GitLab

Hello,

J'utilisais un filtre de ce genre "naguère" pour nettoyer mon html, ça me faisait planter le cache dès que l'on activait la compression (sur des hébergement ovh), page blanche.
Du coup je laisse le apache servir et compresser le html.

Ça fonctionne de ton coté avec le compresseur activé ?

--
Bonne journée
Arnaud B. (Mist. GraphX)

Mist. GraphX a écrit le 20/04/2017 à 09:49 :

Le 20/04/2017 à 00:59, RealET a écrit :

RealET a écrit le 19/04/2017 à 16:10 :

D'autant plus qu'elle est ensuite facilement upgradable :
* avec une fonction qui transforme tous les .xxx?12345 en .12345.xxx sur la sortie de SPIP

Ah ?
Comment fais-tu ?
C'est dans un des codes que tu as publié ?

La fonction timestamp du core de SPIP n'ayant pas de _dist dans son nom, elle ne peut pas être modifiée.
Elle n'a pas de pipeline non plus.
Donc, tu passes par un #FILTRE ?
Ou par le pipeline affichage_final ?

Je suis passé par un #FILTRE.

Pour ceux que ça intéresse :
Connexion · GitLab

Hello,

J'utilisais un filtre de ce genre "naguère" pour nettoyer mon html, ça me faisait planter le cache dès que l'on activait la compression (sur des hébergement ovh), page blanche.
Du coup je laisse le apache servir et compresser le html.

Ça fonctionne de ton coté avec le compresseur activé ?

Oui :wink:
Mais je suis sur un dédié/Debian (chez OVH).

--
RealET

JLuc a écrit le 20/04/2017 à 09:17 :

Le 20/04/2017 à 00:59, RealET a écrit :

* avec une fonction qui transforme tous les .xxx?12345 en .12345.xxx sur la sortie de SPIP

La fonction timestamp du core de SPIP n'ayant pas de _dist dans son nom, elle ne peut pas être modifiée.

Je suis passé par un #FILTRE
Connexion · GitLab

Attention il y a une erreur (double appel du #filtre mini_html dans
Connexion · GitLab

Merci, corrigé

À part ça j'ai pas vu ton nouvel appel de #filtre
(mais il y a tellement de fichiers dans ce commits)
c'est où ?

L'appel du filtre était déjà là dans tous les fichiers.
C'est le filtre qui a changé :

--
RealET