Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Format png et base 64] Optimisation chargement

    28 octobre 2018 à 20:28:04

    Bonsoir à toutes et tous,

    Bon en ce moment je pose pas mal de questions, je ne veux pas de code sauf si vous sentez le besoins de faire un e démonstration.

    >> Ma question porte sur le choix d 'utiliser des images en png ou base64

    j'ai bien comprise que base64 est surtout valable pour les petites images, ça tombe bien j'ai des images de 8-16-32 à 64px maxi.

    Exemple pour un de mes images:

    <img src="data:image/svg+xml;base64,
    PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHd0eC1jb250ZXh0PSIxMjY0NzAwNi0zOTA3LTQwMzUtODJCMi1EOENFOEI4ODVERDEiIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIj48Zz48cGF0aCBzdHlsZT0iZmlsbDojRjBEQkMyOyIgZD0iTTQuMzM5LDIzNC4zMDVoNTAzLjMyMmwwLDB2MjI1LjYyN2MwLDI4Ljc1OS0yMy4zMDksNTIuMDY4LTUyLjA2OCw1Mi4wNjhsMCwwSDQuMzM5bDAsMFYyMzQuMzA1ICBMNC4zMzksMjM0LjMwNXoiIGRhdGEtb3JpZ2luYWw9IiNGMERCQzIiPjwvcGF0aD48cGF0aCBpZD0iU1ZHQ2xlYW5lcklkXzAiIHN0eWxlPSJmaWxsOiNGMkI5Qjg7IiBkPSJNNC4zMzksMjg2LjM3M2g0MjUuMjJjMTQuMzc5LDAsMjYuMDM0LDExLjY1NCwyNi4wMzQsMjYuMDM0djEyMS40OTIgIGMwLDE0LjM3OS0xMS42NTUsMjYuMDM0LTI2LjAzNCwyNi4wMzRINC4zMzlsMCwwVjI4Ni4zNzNMNC4zMzksMjg2LjM3M3oiIGRhdGEtb3JpZ2luYWw9IiNGMkI5QjgiPjwvcGF0aD48Zz4KCTxwYXRoIGlkPSJTVkdDbGVhbmVySWRfMF8xXyIgc3R5bGU9ImZpbGw6I0YyQjlCODsiIGQ9Ik00LjMzOSwyODYuMzczaDQyNS4yMmMxNC4zNzksMCwyNi4wMzQsMTEuNjU0LDI2LjAzNCwyNi4wMzR2MTIxLjQ5MiAgIGMwLDE0LjM3OS0xMS42NTUsMjYuMDM0LTI2LjAzNCwyNi4wMzRINC4zMzlsMCwwVjI4Ni4zNzNMNC4zMzksMjg2LjM3M3oiIGRhdGEtb3JpZ2luYWw9IiNGMkI5QjgiPjwvcGF0aD4KPC9nPjxwYXRoIHN0eWxlPSJmaWxsOiNGMjlDOUI7IiBkPSJNNC4zMzksMjM0LjMwNUwzMDguMDY4LDUyLjA2OGwwLDBjMTAzLjMyLDAuMDE3LDE4OS43LDc4LjU2MiwxOTkuNTE1LDE4MS40MTNsMC4wNzgsMC44MjRINC4zMzl6IiBkYXRhLW9yaWdpbmFsPSIjRjI5QzlCIj48L3BhdGg+PGNpcmNsZSBzdHlsZT0iZmlsbDojRjA2MTRBOyIgY3g9IjQwMy41MjUiIGN5PSI5NS40NTgiIHI9IjUyLjA2OCIgZGF0YS1vcmlnaW5hbD0iI0YwNjE0QSI+PC9jaXJjbGU+PHBhdGggc3R5bGU9ImZpbGw6I0VBNTI0MjsiIGQ9Ik00MjkuNDM4LDUwLjMzMmMtMS4yNSwzOC43MDQtMzIuMzM0LDY5Ljc4OC03MS4wMzgsNzEuMDM4ICBjMTQuMjY3LDI0Ljk2Nyw0Ni4wNzEsMzMuNjQ0LDcxLjAzOCwxOS4zODdjMjQuOTY2LTE0LjI2NywzMy42NDQtNDYuMDcxLDE5LjM4Ny03MS4wMzggIEM0NDQuMjA4LDYxLjY0LDQzNy41MTcsNTQuOTQ5LDQyOS40MzgsNTAuMzMyeiIgZGF0YS1vcmlnaW5hbD0iI0VBNTI0MiI+PC9wYXRoPjxnPgoJPHBhdGggc3R5bGU9ImZpbGw6Izk2NTczNTsiIGQ9Ik00MTIuMjAzLDc4LjEwMmgtMTcuMzU2QzM5NC45LDM0Ljk5LDQyOS44MzcsMC4wNTIsNDcyLjk0OSwwdjE3LjM1NiAgIEM0MzkuNDE4LDE3LjM5MSw0MTIuMjM4LDQ0LjU3LDQxMi4yMDMsNzguMTAyeiIgZGF0YS1vcmlnaW5hbD0iIzk2NTczNSI+PC9wYXRoPgoJCgkJPHJlY3QgeD0iMzAzLjcyNSIgeT0iODEuMzkiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjcwNzEgMC43MDcxIC0wLjcwNzEgLTAuNzA3MSA2MDMuODc1MiAtNTAuNTMzMSkiIHN0eWxlPSJmaWxsOiM5NjU3MzU7IiB3aWR0aD0iMTcuMzU2IiBoZWlnaHQ9IjM2LjgyIiBkYXRhLW9yaWdpbmFsPSIjOTY1NzM1Ij48L3JlY3Q+CgkKCQk8cmVjdCB4PSIxOTguNTU3IiB5PSIxNDMuMTgxIiB0cmFuc2Zvcm09Im1hdHJpeCgtMC43MDcxIDAuNzA3MSAtMC43MDcxIC0wLjcwNzEgNDc3Ljc2NzIgMTA1LjgyMDcpIiBzdHlsZT0iZmlsbDojOTY1NzM1OyIgd2lkdGg9IjM2LjgyIiBoZWlnaHQ9IjE3LjM1NiIgZGF0YS1vcmlnaW5hbD0iIzk2NTczNSI+PC9yZWN0PgoJCgkJPHJlY3QgeD0iMjQyLjk4MiIgeT0iMTY4LjE3NiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuNzA3MSAwLjcwNzEgLTAuNzA3MSAtMC43MDcxIDU2MS41NDY5IDE0MC41NzE0KSIgc3R5bGU9ImZpbGw6Izk2NTczNTsiIHdpZHRoPSIxNy4zNTYiIGhlaWdodD0iMzYuODIiIGRhdGEtb3JpZ2luYWw9IiM5NjU3MzUiPjwvcmVjdD4KCQoJCTxyZWN0IHg9IjI3Ni42NDEiIHk9IjE0My4yMDgiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjcwNzEgMC43MDcxIC0wLjcwNzEgLTAuNzA3MSA2MTEuMDgzIDUwLjY1MzMpIiBzdHlsZT0iZmlsbDojOTY1NzM1OyIgd2lkdGg9IjM2LjgyIiBoZWlnaHQ9IjE3LjM1NiIgZGF0YS1vcmlnaW5hbD0iIzk2NTczNSI+PC9yZWN0PgoJCgkJPHJlY3QgeD0iNDI0LjE2MSIgeT0iMTc3Ljg5NCIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuNzA3MSAwLjcwNzEgLTAuNzA3MSAtMC43MDcxIDg4Ny40NDIyIDUuNTUzMSkiIHN0eWxlPSJmaWxsOiM5NjU3MzU7IiB3aWR0aD0iMzYuODIiIGhlaWdodD0iMTcuMzU2IiBkYXRhLW9yaWdpbmFsPSIjOTY1NzM1Ij48L3JlY3Q+CgkKCQk8cmVjdCB4PSIzMjguNzA5IiB5PSIxNzcuOTAxIiB0cmFuc2Zvcm09Im1hdHJpeCgtMC43MDcxIDAuNzA3MSAtMC43MDcxIC0wLjcwNzEgNzI0LjQ5OTggNzMuMDYpIiBzdHlsZT0iZmlsbDojOTY1NzM1OyIgd2lkdGg9IjM2LjgyIiBoZWlnaHQ9IjE3LjM1NiIgZGF0YS1vcmlnaW5hbD0iIzk2NTczNSI+PC9yZWN0PgoJCgkJPHJlY3QgeD0iMTM3Ljc5MiIgeT0iMTc3LjkzNyIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuNzA3MSAwLjcwNzEgLTAuNzA3MSAtMC43MDcxIDM5OC42MDk5IDIwOC4xMjEpIiBzdHlsZT0iZmlsbDojOTY1NzM1OyIgd2lkdGg9IjM2LjgyIiBoZWlnaHQ9IjE3LjM1NiIgZGF0YS1vcmlnaW5hbD0iIzk2NTczNSI+PC9yZWN0Pgo8L2c+PHBhdGggc3R5bGU9ImZpbGw6I0VCRDNCNzsiIGQ9Ik0zMjIuNjgxLDI4Ni4zNzNoMTA2Ljg3OGMxNC4zNzksMCwyNi4wMzQsMTEuNjU0LDI2LjAzNCwyNi4wMzR2MTIxLjQ5MiAgYzAsMTQuMzc5LTExLjY1NSwyNi4wMzQtMjYuMDM0LDI2LjAzNEgxMjEuNzE3TDYxLjQzMSw1MTJoMzk0LjE2MmMyOC43NTksMCw1Mi4wNjgtMjMuMzA5LDUyLjA2OC01Mi4wNjhsMCwwVjIzNC4zMDVIMzgyLjk3NiAgTDMyMi42ODEsMjg2LjM3M3oiIGRhdGEtb3JpZ2luYWw9IiNFQkQzQjciPjwvcGF0aD48cGF0aCBzdHlsZT0iZmlsbDojRjJBRUFDOyIgZD0iTTQyOS41NTksNDU5LjkzMmMxNC4zNzksMCwyNi4wMzQtMTEuNjU0LDI2LjAzNC0yNi4wMzRWMzEyLjQwNyAgYzAtMTQuMzc5LTExLjY1NS0yNi4wMzQtMjYuMDM0LTI2LjAzNEgzMjIuNjgxTDEyMS43MTcsNDU5LjkzMkg0MjkuNTU5eiIgZGF0YS1vcmlnaW5hbD0iI0YyQUVBQyI+PC9wYXRoPjxyZWN0IHg9IjQuMzM5IiB5PSIzNjQuNDc1IiBzdHlsZT0iZmlsbDojRjI4Njg1IiB3aWR0aD0iNDUxLjI1NCIgaGVpZ2h0PSIxNy4zNTYiIGRhdGEtb3JpZ2luYWw9IiNGMjg2ODUiIGNsYXNzPSJhY3RpdmUtcGF0aCI+PC9yZWN0PjwvZz4gPC9zdmc+" />

    Ce qui donne 4734 caractère juste pour une image !?

    Et il y en aurais entre 30 et 40 sur ma page.

    >> Etant en local, je ne peux tester l'intérêt niveau performances entre chargement de la page HTML (poids alourdi avec base64) et les requête http au serveur pour charger les images.

    Reste l'idée d'un sprite qui regroupe le tout, mais certaines images ont une sémantique, donc besoins d'une balise <img + le alt)

    Ais-je bien comprise, ou alors je me trompe, sachant que depuis un mobile certains sont toujours en 3G vu la couverture médiocre actuelle.

    Merci à vous pour vos lumières et expérience :)

    ps: prochain sujet : Utilité et bonne pratique avec srcset pour que le navigateur face le choix + problème de ratio 2 sur Rétina (Iphone 5 par exemple) :D 

    -
    Edité par pipelette13 28 octobre 2018 à 21:05:29

    • Partager sur Facebook
    • Partager sur Twitter
    Stéphanie, blonde mais je me débrouille (....?) ** Mon sondage: mode Dark VS mode Clean
      29 octobre 2018 à 8:17:26

      l'avantage des img en base 64 c'est que tu fais les requêtes en moins, et les pages sont plus portable. 

      Par contre ça demande un peut plus de travail pour optimiser si tu veux utiliser plusieurs fois la même img.

      • Partager sur Facebook
      • Partager sur Twitter

      la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

      Mon GitHub

        29 octobre 2018 à 8:31:25

        Pour tester l’efficacité tu as le Benchmark apache sous Windows qui permet de faire x requête(s) et même en local et ensuite ça te renvoi des stats, il suffit donc de le faire avec tes images en png et ensuite en base64 et tu verras la différence :)

        Je l'avais fait pour nodeJS, voici un tuto que je trouve plutôt bien fait : http://naholyr.fr/2011/06/benchmark-node-js-methodes-synchrones-ou-asynchrones/

        • Partager sur Facebook
        • Partager sur Twitter
        Développeur FrontEnd | Site CV / Site PRO
          29 octobre 2018 à 11:29:26

          Coucou et merci à vous eux :) 

          ox223252:

          Oui j'ai bien comprise pour les requêtes, sauf q'un icône représente dans mon exemple 4734 caractères de texte dans mon HTML, donc multiplié par 20 ou 30 icônes ? mon fichier HTML va passer de centaines de lignes à + de 1000 lignes, donc le rapport bénéfice avec un requête serveur ?

          Pour optimiser je peux placer la base64 dans une class CSS en effet, mais j'alourdi la aussi ma feuille css. 

          Il y a un package sous Gulp pour la conversion, sinon reste la technique du sprite css (toujours sous Gulp)

          Arf dilemme.....

          Pickles: tu avais testé le bench entre png et base64, si oui quelle était ta conclusion ?

          merci pour ton tuto qui est clair :)

          --->

          J'ai consultée pas mal de site en tout genre (amateur et pro comme le monde, etc...) et je trouve très peu de base64, j'ai l'impression que c'est utile pour un stockage en BDD par contre.

          -
          Edité par pipelette13 29 octobre 2018 à 11:33:36

          • Partager sur Facebook
          • Partager sur Twitter
          Stéphanie, blonde mais je me débrouille (....?) ** Mon sondage: mode Dark VS mode Clean
            29 octobre 2018 à 11:51:24

            les base 64 je les utilise surtout quand je fais de la doc, c'est plus simple à passer aux gens, aucun problème de compatibilité, de fichier manquant ou autre ^^. et pour la taille ça rallonge pas tant que ça le doucement, car tu remplace une image par son contenu donc ça ce vaux (à un ration+33% quand même).

            <img src="data:image/svg;base64,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"/>

            après tout je n'ai qu'une ligne là ^^

            EDIT : par contre on va pas ce cacher que le SDZ est pas … pour afficher une ligne de 28660 lettres 

            -
            Edité par ox223252 29 octobre 2018 à 11:53:49

            • Partager sur Facebook
            • Partager sur Twitter

            la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

            Mon GitHub

              29 octobre 2018 à 13:21:57

              Non j'avais testé pour nodeJS la version synchrone et asynchrone donc rien à voir mais le principe reste le même :)
              • Partager sur Facebook
              • Partager sur Twitter
              Développeur FrontEnd | Site CV / Site PRO
                29 octobre 2018 à 14:35:51

                Merci, ça m'éclaire sur les avantages et inconvénients.

                J'étais parties sur un sprite, mais en cas d'évolution il faut revoir le code à chaque fois.

                J'ais faite aussi un test, 20 icône en 32*32 et j'obtiens + de 95.000 caractères dans mon HTML ^^ 

                Cela reste du texte mais c'est lourds pour un fichier HTML + ces caractères.

                Je vais aussi regarder du côté du format SVG...

                -
                Edité par pipelette13 29 octobre 2018 à 14:42:42

                • Partager sur Facebook
                • Partager sur Twitter
                Stéphanie, blonde mais je me débrouille (....?) ** Mon sondage: mode Dark VS mode Clean
                  29 octobre 2018 à 14:44:20

                  Autre inconvénient du base64 ici : ça ne se met pas en cache (sauf si tu mets ton HTML en cache).

                  Cette technique est conseillée si tu as de petites images et en petit nombre. 

                  > J'étais parties sur un sprite, mais en cas d'évolution il faut revoir le code à chaque fois.

                  Bin si tu génères ton sprite, pas besoin de revoir le code, si ? Perso quand je le peux j'utilise un plugin Grunt ou Gulp qui va chercher les icônes dans un dossier et fabrique le sprite tout seul. Si tu mets un nouveau fichier dans le dossier, il suffit de relancer la tâche associée, et paf.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Pas d'aide concernant le code par MP, le forum est là pour ça :)

                    29 octobre 2018 à 15:17:04

                    Bonjour Lamecarlate et merci de ta réponse :),

                    Mes images sont en 32*32, et visiblement c'est déjà trop lourd en base 64, tu as raisons. j'ai consultée le code source de pas mal de sites, et à part la page d'accueil de Google, les icônes en base 64 se font rares.

                    Oui j'utilise Gulp pour générer mon image sprite, mais si rajoutes des images dans mon dossier à piper(), j'ai peur que l'ordre des images change.

                    Il va les prendre suivant l'extension et ordre alphabétique, ou la solution serait de les renommer (img-1,2 3, etc...) pour conserver l'ordre originel.

                    Aucun impact pour des images dans le css si j'utilise des class, sauf si je boucle avec un @foreach sous Sass ^^

                    ps: J'utilise aussi le package "compress-images" pour choisir le taux de compression...

                    ----

                    Mais pour images sémantiques <img> en HTML + le alt="desc" , la j'hésitais entre le png et l'encodage 64. Je pense donc rester sur du traditionnel, soit en .png avec un scrset suivant le viewport ( l'émulation sur iphone 5 donne une catastrophe :D)

                    -
                    Edité par pipelette13 29 octobre 2018 à 15:22:51

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Stéphanie, blonde mais je me débrouille (....?) ** Mon sondage: mode Dark VS mode Clean
                      29 octobre 2018 à 15:24:18

                      Salut,

                      Oui, laisse tes images en png. Et jette un oeil à ceci : https://blog.eleven-labs.com/fr/http2-nest-pas-le-futur-cest-le-present/ ;)

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Il n'y a pas de mauvais navigateur, il n'y a que du mauvais code !

                        29 octobre 2018 à 15:44:55

                        Hi rhooManu :),

                        Bon j'ai relue 4 fois et pas tout comprise, le côté réseau n'est pas mon fort...

                        Vu que le protocole n'est pas encore officiel et standardisé comme http/1, côté serveur il faut un dédié pour configurer via Node+ Express.

                        Sauf que moi je serais en mutualisé, donc cela dépend de mon hébergeur, donc pas de version 2. Mais vivement que ce soit le standard du web.

                        Je vais donc faire ainsi (faut bien trancher) :

                        - icônes sémantiques en png (balise <img>)

                        - les autres via mon scss (.class), image sprite générée et compressée avec Gulp.

                        je vais quand même regarder du côté du format SVG pour les tout petites icones.

                        ps: avec ton lien et ceux donnés sur mon sujet "mode dark vs mode blanc" pour le confort de lecture, je viens de ma taper plus d'heure de lecture, sans compter les docs diverses de mon côté (css grid, etc...) qu'on ne dise pas que je ne fait pas de veille :D

                        -
                        Edité par pipelette13 29 octobre 2018 à 15:49:36

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Stéphanie, blonde mais je me débrouille (....?) ** Mon sondage: mode Dark VS mode Clean
                          29 octobre 2018 à 16:26:08

                          Hum ? Quel rapport avec Nodejs et Express ? Chaque serveur (Apache, Nginx ou NodeJS, pour ne citer qu'eux) peut l'activer ou non.

                          Si tu es sur un mutualisé, normalement ils sont sur Apache, et ils le proposent presque tous nativement… Exemple chez OVH http://community.ovh.com/t/http2-sur-tout-vos-sites/6196 

                          -
                          Edité par EmmanuelBeziat 29 octobre 2018 à 16:27:16

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Il n'y a pas de mauvais navigateur, il n'y a que du mauvais code !

                            29 octobre 2018 à 16:41:29

                            Ah d'accord, je vais regarder ça de plus près alors.

                            Je disais ça car un hébergeur n'aime trop que l'on touche aux fichiers Apache (droits)

                            Bon suis une bille dans ce domaine...

                            -
                            Edité par pipelette13 29 octobre 2018 à 16:44:15

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Stéphanie, blonde mais je me débrouille (....?) ** Mon sondage: mode Dark VS mode Clean

                            [Format png et base 64] Optimisation chargement

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown