Base64 Encoder, un encodeur pour accélérer vos pages web

[ 12 ] Commentaires
Share

J’en parlais ce matin : utiliser l’encodage Base64 peut s’avérer bien utile pour réduire drastiquement le nombre de ressources chargées pour une page web. Dans l’idée d’avoir, du coup, toujours sous la main un encodeur Base64, j’en ai fait un aujourd’hui moi-même, que j’ai appelé Base64 Encoder (on peut pas dire que j’ai eu beaucoup d’imagination). Je suis parti de l’application disponible sur le site de GreyWyvern, à laquelle j’ai rajouté les possibilité de pouvoir encoder simplement du texte ou bien un fichier en l’uploadant directement sur le serveur.  

(du coup, pas grand chose à dire sur cette application, donc ce billet va essentiellement servir de page de feedbacks)

Ah si, 2-3 petites choses à dire quand même.

  • Le Base64 s’obtient très simplement avec python, comme suit (après avoir importé la librairie Base64):

    encoded_content = base64.b64encode(content)

  • Le gzip est calculé via la libraire python zlib, et via la fonction compress. Après il me suffit de faire un len() dessus pour connaitre le nombre d’octets. La ligne de code est donc :

    gzip_encoded_content_length = len(zlib.compress(encoded_content))

  • Le fichier uploadé se lit comme suis sur AppEngine (sans passer par le datastore : je ne stocke rien du tout) :

    query_file = cgi.escape(self.request.POST.get(‘file’).file.read())

Par contre, je discutais tout à l’heure avec Rangzen Kermit (qui s’avère être camarade de promo 🙂 ), et il me disait que ce qui serait bien, ce serait de faire un outil qui puisse s’adapter au fait que IE5/6/7 ne supportent pas le Base64. Pour le coup, il m’a donné le lien vers un billet très utile sur le sujet : Quick Tip: How to Target IE6, IE7, and IE8 Uniquely with 4 Characters.

De mon côté, je pense que ce qui serait bien, c’est de mettre un fichier CSS en entrée (en uploadant ou en mettant l’URL) et que l’utilitaire sur AppEngine parse le CSS en trouvant toutes les références internes à des images (par exemple les background: url(image/toto.png);), et irait remplacer ces références par le code Base64 créé à partir de l’image (si celle-ci est correctement récupérée). (Edit : Kermit m’a aussi formulé l’idée)

Honnêtement, je pense que c’est faisable, mais déjà beaucoup plus violent.

Parce que, autant un script comme celui-ci serait bien utile, autant l’idée de Kermit est assez importante, et tant qu’à faire, il serait aussi bien de mettre dans le même temps la référence pour que les « vieux » navigateurs continuent à voir la ressource, une fois qu’on a pu encoder celle-ci en Base64.

Dans un premier temps, je ne crois pas que je pourrais faire assez rapidement un outil parsant le CSS et relevant toutes les occurrences de url(), allant voir si l’URL contient http://, etc, mais ça n’irait pas beaucoup plus loin…

Vous serez peut-être intéressé :

12 commentaires sur ce billet

  1. PSP dit :

    Inutile pour moi vu que je n’ai pas gzip mais bon à garder sous la main comme toujours 😀

    RépondreRépondre
  2. rangzen dit :

    « Par contre, je discutais tout à l’heure avec Rangzen (qui s’avère être camarade de promo 🙂 ) » Gné ?

    RépondreRépondre
  3. Louis dit :

    @PSP: En fait si, tu as gzip intégré à ton navigateur. Donc si le contenu est encodé en gzip, ton navigateur le décode en local (et le temps de décodage est négligeable par rapport au temps de connexion/download).

    @rangzen: J’ai corrigé, excuse moi 🙂

    RépondreRépondre
  4. PSP dit :

    @Louis: Oui je sais mais mon hébergeur ne m’offre pas la possibilité d’utiliser gzip sur mon serveur malgré l’offre que j’ai prise donc impossible d’encoder le contenu avec gzip …

    RépondreRépondre
  5. Louis dit :

    @PSP: Ah oui effectivement dans ce cas là…

    Sinon, il te reste la solution d’envoyer des fichiers gzippé sur ton serveur (à côté des fichiers originaux, par exemple tu aura dans le même dossier un style.css et un style.css.gz), et dans le .htaccess tu dis à Apache d’envoyer les .gz si il en trouve pour la même ressource que celle demandée. D’ailleurs, si tu as le plugin WP-Super-Cache, il y a des chances pour que ce soit déjà le cas (ce plugin utilise ce principe).

    RépondreRépondre
  6. PSP dit :

    @Louis: Oui c’est exactement ça 🙂
    J’utilise WP-Super-Cache pour mon site d’actu PSP et ça donne ce résultat !
    D’ailleurs jvais pas tarder à passer mes autres sites sous WP-Super-Cache vu que j’ai bidouillé pour activé gzip via le htaccess mais sans succès 😉

    Par contre, il me semble que pas mal d’hébergeurs offrent la possibilité d’utiliser gzip non ? Même les petits mutualisés à 2€ par mois non ?

    RépondreRépondre
  7. Louis dit :

    @PSP: Ben disons que ça dépend si le mod est activé sur l’Apache qu’on te fournit… Mais je ne suis plus sur un mutualisé donc je ne peux pas tester là…

    RépondreRépondre
  8. PSP dit :

    @Louis: D’accord 😉
    En fait, je me demandais si sur les mutualisés gzip était activé car je suis sur un semi-dédié à 40€ par mois chez mavenhosting et gzip ne peut être activé vu que ce n’est pas compris dans l’offre..

    RépondreRépondre
  9. Louis dit :

    @PSP: 40€ et tu n’as pas le gzip ??? (TU TE FAIS AVOIR) Tu peux m’envoyer un mail pour me dire combien tu as de visites/mois ? PArce que là ça me semble très très cher pour pas grand chose…

    RépondreRépondre
  10. PSP dit :

    Ouép pas de gzip malgré que j’ai demandé des infos à ce sujet il y a une semaine environ, pas de soucis, je t’envoie un e-mail 😉

    RépondreRépondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *