Bonjour,
Je souhaite refaire toutes les icônes de mon site de manière à pouvoir les intégrer en SVG.
En effet, mon site étant basé principalement sur la géolocalisation & google ayant abandonné le support d'ie8, je peux profiter du SVG qui apparait comme la solution pour les écrans rétina et autres futures ratio d'écran. Le support est possible avec un fichier .png, mais ici ça me ferait perdre du temps pour rien, le svg faisant gagner énormément de temps de création (Finit illustrator ou Photoshop Ex: Faticon) .
Je veux donc tout, et j'ai l'impression que ce n'est pas possible :
1/ que mon SVG s'adapte aux différents ratio d'écran (jusqu'ici pas de problème c'est son métier)
2/ que mon SVG soit modifiable en JS/CSS (adieu implémentation par la balise img et background-image)
3/ que mon SVG puisse être mis en cache (sans img ou background-image, la tache s'avère impossible ?)
4/ Ne pas utiliser les web font SVG qui selon moi, seront emmenés à devenir obsolètes (accessibilité, pas fait pour à la base, requête pour chaque icone en +, js en plus pour le chargement, ... ) ou du moins remplacé à terme par une technologie plus avantageuse.
5/ Que l'on puisse gérer l'utilisation multiple d'un SVG sans pour autant copier tout le code à chaque fois (en cas d'intégration direct avec la balise <svg>)
6/ Ne faire qu'un appel pour tous les SVG (un sprite css SVG à la rigueur)
Alors d'après mes conclusions j'ai choisis :
L'intégration des svg en balise inline dans une fonction que j'appel pour savoir quel svg aller chercher à chaque fois. C'est le mieux que j'ai pus faire :
Avantages :
1/ ok
2/ ok
4/ ok
5/ ok
Par contre on ne résous pas l'inconvénient principal :
3/ Mettre en cache ce SVG
6/ impossible de cette manière
C'est impossible, puisse qu'il s'agit d'une fonction dynamique. J'avais pensé à un sprite CSS regroupant tous les SVG, mais en plus d'avoir un support limite limite, on ne peux pas interagir avec les SVG en JS/CSS...
Vu que je dois avoir 30 icônes à changer sur le site, disons que les SVG en question vont ajouter environ 50ko
Ma question :
Cela vaut t'il le coup d'avoir 50ko chargé en + pour chaque connexion afin d'alléger le serveur de 30 requêtes une première fois (vu que en img ça aurait été mis en cache par la suite) et d'avoir une réel solution avec un réel support au ratio des écrans + transformation en CSS/JS ? Sans compter que pour l'instant il ne s'agit que de 30 images, mais quand il y en aura 300..
A première vu je dirais oui, mon site étant quasiment entièrement en ajax, chargé une fois, les rechargements de page sont rares, mais peut-être existe t'il une solution meilleure qui pourrait en plus mettre en cache ?
J'ai vu une solution intéressante également pour éviter de charger de tous les SVG alors qu'on en à pas forcément besoin : file_get_content('mon_svg'), qui va récupérer le contenu du svg et l'intégrer. Mais dans ses cas là, on rajoute une requête au serveur, non ? Peut-être pas d'ailleurs, puisse qu'il ne s'agit pas d'une requête client mais serveur, cela est peut-être casi-instantané ? Est-ce que dans ses cas là, le SVG peut être mis en cache ? Personnellement je ne pense pas, puisse qu'il s'agit du serveur qui va s'occuper de récupérer le contenu du SVG, mais bon sait-on jamais avec un cache spécial style Varnish ?
En tout cas, merci pour vos réponses, comme vous pouvez le constater, ma réflexion est déjà bien aboutie, je désire seulement savoir s'il est possible d'améliorer en plus le tout (surtout au niveau du cache).
Pour l'instant l'utilisation de file_get_content('mon_svg') me semble être la plus avantageuse (pour éviter de charger tous les SVG unitilement). On pourrait même créer une fonction pour avoir des comportement différent via l'id pour des SVG similaires (pour éviter que 2 svg identiques s'activent en même temps en cas d'utilisation avec le JS/CSS) ex :
Après si ont veut on peut donc cibler l'un sans impacter sur l'autre :
A méditer à l'amélioration donc.
Bonne journée/soirée à tous !
Kevin.
Modifié par kevinlourenco (17 Jun 2016 - 21:08)
Je souhaite refaire toutes les icônes de mon site de manière à pouvoir les intégrer en SVG.
En effet, mon site étant basé principalement sur la géolocalisation & google ayant abandonné le support d'ie8, je peux profiter du SVG qui apparait comme la solution pour les écrans rétina et autres futures ratio d'écran. Le support est possible avec un fichier .png, mais ici ça me ferait perdre du temps pour rien, le svg faisant gagner énormément de temps de création (Finit illustrator ou Photoshop Ex: Faticon) .
Je veux donc tout, et j'ai l'impression que ce n'est pas possible :
1/ que mon SVG s'adapte aux différents ratio d'écran (jusqu'ici pas de problème c'est son métier)
2/ que mon SVG soit modifiable en JS/CSS (adieu implémentation par la balise img et background-image)
3/ que mon SVG puisse être mis en cache (sans img ou background-image, la tache s'avère impossible ?)
4/ Ne pas utiliser les web font SVG qui selon moi, seront emmenés à devenir obsolètes (accessibilité, pas fait pour à la base, requête pour chaque icone en +, js en plus pour le chargement, ... ) ou du moins remplacé à terme par une technologie plus avantageuse.
5/ Que l'on puisse gérer l'utilisation multiple d'un SVG sans pour autant copier tout le code à chaque fois (en cas d'intégration direct avec la balise <svg>)
6/ Ne faire qu'un appel pour tous les SVG (un sprite css SVG à la rigueur)
Alors d'après mes conclusions j'ai choisis :
L'intégration des svg en balise inline dans une fonction que j'appel pour savoir quel svg aller chercher à chaque fois. C'est le mieux que j'ai pus faire :
Avantages :
1/ ok
2/ ok
4/ ok
5/ ok
Par contre on ne résous pas l'inconvénient principal :
3/ Mettre en cache ce SVG
6/ impossible de cette manière
C'est impossible, puisse qu'il s'agit d'une fonction dynamique. J'avais pensé à un sprite CSS regroupant tous les SVG, mais en plus d'avoir un support limite limite, on ne peux pas interagir avec les SVG en JS/CSS...
Vu que je dois avoir 30 icônes à changer sur le site, disons que les SVG en question vont ajouter environ 50ko
Ma question :
Cela vaut t'il le coup d'avoir 50ko chargé en + pour chaque connexion afin d'alléger le serveur de 30 requêtes une première fois (vu que en img ça aurait été mis en cache par la suite) et d'avoir une réel solution avec un réel support au ratio des écrans + transformation en CSS/JS ? Sans compter que pour l'instant il ne s'agit que de 30 images, mais quand il y en aura 300..
A première vu je dirais oui, mon site étant quasiment entièrement en ajax, chargé une fois, les rechargements de page sont rares, mais peut-être existe t'il une solution meilleure qui pourrait en plus mettre en cache ?
J'ai vu une solution intéressante également pour éviter de charger de tous les SVG alors qu'on en à pas forcément besoin : file_get_content('mon_svg'), qui va récupérer le contenu du svg et l'intégrer. Mais dans ses cas là, on rajoute une requête au serveur, non ? Peut-être pas d'ailleurs, puisse qu'il ne s'agit pas d'une requête client mais serveur, cela est peut-être casi-instantané ? Est-ce que dans ses cas là, le SVG peut être mis en cache ? Personnellement je ne pense pas, puisse qu'il s'agit du serveur qui va s'occuper de récupérer le contenu du SVG, mais bon sait-on jamais avec un cache spécial style Varnish ?
En tout cas, merci pour vos réponses, comme vous pouvez le constater, ma réflexion est déjà bien aboutie, je désire seulement savoir s'il est possible d'améliorer en plus le tout (surtout au niveau du cache).
Pour l'instant l'utilisation de file_get_content('mon_svg') me semble être la plus avantageuse (pour éviter de charger tous les SVG unitilement). On pourrait même créer une fonction pour avoir des comportement différent via l'id pour des SVG similaires (pour éviter que 2 svg identiques s'activent en même temps en cas d'utilisation avec le JS/CSS) ex :
$MonSVG = file_get_content('mon_svg') ;
fonction addSVG($idSVG , $SVGelement)
{
SVGelement = str_replace('id=""' , 'id="'.$idSVG.'"' , SVGelement)
}
// Mon premier SVG qui doit faire une animation
addSVG('MonSVG1', $MonSVG) ;
// Mon ddexième SVG qui représente la même chose
addSVG('MonSVG2', $MonSVG) ;
Après si ont veut on peut donc cibler l'un sans impacter sur l'autre :
<script>
document.getElementById('MonSVG1').style.display = 'none' ;
// Ne fera disparaitre que le premier SVG
</script>
A méditer à l'amélioration donc.
Bonne journée/soirée à tous !
Kevin.
Modifié par kevinlourenco (17 Jun 2016 - 21:08)