Cher journal, chères moules,
Votre site pèse trois tonnes, vos polices tirent des mégaoctets et vos SVG partent sur le web sans même être décortiqués ? J'ai deux petites soluces. Libres (MIT1), en Go, et qui ne réclament ni Node ni Python pour tourner. Transparence d'abord : je les ai extraites d'un service que je bricole (patu.dev, hop, le lien est passé ; et comme il est court, vous allez vous en souvenir longtemps, trop tard pour le « -1 pub », pire qu'un rickroll). Mais le code est à vous, et c'est lui le sujet.
woffify : décortiquer vos polices jusqu'au WOFF2
L'encodeur WOFF2 de référence, c'est google/woff2 (woff2_compress). Sauf qu'il ne mange que du TTF/OTF et ne fait pas de subsetting. Or un TTF brut sur le web, c'est deux tiers de gras2, et le subsetting (ne garder que les glyphes utiles) est le plus gros levier.
woffify enrobe le même encodeur et ajoute les deux trucs qui manquaient :
-
Entrée WOFF 1.0, décodée en SFNT en Go pur, pour recompresser vos vieux
.woffsans perte. -
Subsetting via HarfBuzz (
hb-subset) : un sous-ensemble latin fait couramment 80 à 95 % de moins.
Détail pour les maniaques (bonjour) : sur du TTF/OTF sans subsetting, la sortie est octet pour octet identique à woff2_compress (même encodeur, Brotli qualité 11). Pas « presque pareil », pareil.
Formats avalés : .woff, .ttf, .otf, .ttc, .eot. Oui, EOT, pour exhumer vos assets Internet Explorer3 ; seul l'EOT non compressé est lu, la compression MicroType Express est refusée avec un message clair plutôt qu'un segfault poli.
Le tout tient dans un seul binaire statique (image ~6 Mo), zéro Node, zéro Python, pensé pour la CI et les clusters.
woffify -subset-text "Salut les moules" Brand.ttf
silk : dégraisser vos SVG sans invoquer Node
Pour les SVG, la référence c'est svgo. C'est du Node. Tirer 300 Mo de node_modules pour raboter une icône de 2 Ko dans un service Go, non merci.
silk réimplémente en Go pur (pas de cgo, pas de runtime externe) les passes de svgo qui pèsent vraiment : convertPathData, mergePaths, et une poignée de passes structurelles sûres. Et surtout, il a une religion : la sortie doit rendre pixel pour pixel comme l'entrée. Toute construction dont l'optimisation ne peut pas être prouvée sûre est réémise telle quelle, octet pour octet. Pas de « ça a marché sur mes trois icônes ».
Le seul vrai risque de fidélité, c'est l'arrondi des coordonnées : il est donc opt-in et borné (-precision). Les translations de transformations ne sont arrondies que si vous le demandez, parce qu'arrondir la translation d'un groupe décale des sous-arbres entiers et transforme un joli motif régulier en moiré4.
out, err := silk.Optimize(svg, silk.DefaultOptions())
Licence, et non ce n'est pas du Rust
Les deux sont en MIT. Je vous laisse lancer le débat permissif contre copyleft en commentaire, c'est vendredi quelque part5. Et non, ce n'est pas réécrit en Rust ; je sais, je sais, on me l'a déjà dit.
- silk :
github.com/Gheop/silk - woffify :
github.com/Gheop/woffify
Les deux tournent en prod pour de vrai (oui, derrière le service du début, je ne le redis pas, vous l'avez déjà en tête). Mais l'idée du journal, c'est surtout que si vous devez alléger fonts ou SVG dans un pipeline sans Node ni Python, ces deux-là vous éviteront de réinventer le bouchot. Patchs, issues et remarques acides bienvenus.
Voilà, votre bouchot est délesté. Vous pouvez retourner aux moules-frites.
# Dredi
Posté par gUI (Mastodon) . Évalué à 4 (+1/-0).
Ouais enfin ça dépend quand.
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Dredi
Posté par Luc-Skywalker . Évalué à 2 (+0/-0).
c'est pas une chanson de l'anarchiste du Sud Ouest ? (ah non, en fait, c'est Samedi soir sur la terre)
"Si tous les cons volaient, il ferait nuit" F. Dard
[^] # Re: Dredi
Posté par Patu . Évalué à 1 (+1/-0).
Bien vu. En moyenne sur la semaine, « il est vendredi quelque part » n'est vrai qu'environ 50h sur 168 : les fuseaux extrêmes (UTC-12 et UTC+14) sont à 26h d'écart, donc un jour donné existe 24+26 = 50h. Soit ~30% du temps, tu as raison.
Sauf que là je poste un vendredi en début d'après-midi heure de Paris (UTC+2 en été), soit ~13h UTC : à cet instant c'est vendredi de UTC-12 à UTC+10, environ 85% des fuseaux. Mon CQFD est donc sauf… jusqu'à ce que quelqu'un relise ce journal un mardi. Merci pour le rapport de bug, je passe la note en 0.8-stable !
[^] # Re: Dredi
Posté par Benoît Sibaud (site web personnel) . Évalué à 3 (+0/-0).
Il semble essentiel de prendre en compte les personnes n'étant pas sur Terre (ni en orbite directe autour de la Terre disons)). Parce que sur la Lune ou sur Mars, on ne sait pas si c'est soirée disco chez Boris, déjà qu'on ne sait pas si c'est les vendredis.
[^] # Re: Dredi
Posté par Benoît Sibaud (site web personnel) . Évalué à 5 (+2/-0).
Vous vous demandez légitimement « Vendredi quelque part sur Terre, mais où ? ». Voici donc l'information que vous attendiez : « sur une île inhabitée à l'embouchure de l'Orénoque, près des côtes vénézuéliennes » (source)
https://www.openstreetmap.org/relation/1083284#map=12/8.6206/-60.6965
[^] # Re: Dredi
Posté par Patu . Évalué à 0 (+0/-0).
Wouah, fallait la trouver celle là !!
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.