Lancé en 2006, le service Google Traduction va connaître une de ses plus grandes évolutions dans les prochains jours. Google, grâce aux grands modèles de langage, va intégrer un concurrent de Duolingo à l'application. Gemini Live va aussi permettre de discuter avec une personne qui ne parle pas la même langue
[Précommande] La Game Boy en Lego est disponible en précommande depuis juillet et son prix a récemment abissé avant même sa sortie. L'occasion de (re)mettre la main sur la mythique console portable de Nintendo, revisitée en briques.
D'abord lancée en Inde, la formule ChatGPT Go, qui permet de poser plus de questions à GPT-5 que dans la version gratuite, va faire son arrivée dans d'autres pays. OpenAI pourrait la lancer en France pour inciter plus d'utilisateurs à payer pour ChatGPT.
Vous ne le savez peut-être pas, mais le site sur lequel vous êtes actuellement est un site 100% statique. Je gère le contenu côté back avec un CMS en PHP (rédaction, édition, workflow), mais la partie publique n’exécute aucun PHP : pas de base de données, juste des fichiers HTML/CSS/JS et des images. Et tout ça est généré à partir de fichiers Markdown avec Hugo.
Et optimiser tout ça c’est pas de la tarte car si vos templates sont mal pensés, Hugo peut mettre une plombe à générer le site. Entre partiels recalculés pour rien, boucles trop larges et images retraitées à chaque passage, on flingue les perfs sans s’en rendre compte.
Et c’était mon cas au début. Je regardais avec envie les mecs qui sortaient un build en moins d’une seconde tout en restant réaliste car j’ai quand même environ 60 000 pages à générer. Au final, je suis passé de plusieurs heures de build à environ 5 minutes en optimisant les templates, le cache et le pipeline d’assets.
Tout ceci est encore en cours de tests, et ce n’est pas parfait donc il est possible que ça change à l’avenir et vous faites peut-être autrement (dans ce cas ça m’intéresse !!). Bref, voici mon retour d’XP sous forme de conseils pour transformer, vous aussi, votre escargot en fusée 🚀.
Partials - Cachez-moi tout ça (bien)
Hugo sait mettre en cache le rendu d’un partial. Utilisez partialCached (alias de partials.IncludeCached) partout où la sortie est identique sur beaucoup de pages.
Le truc malin, c’est d’utiliser des variantes (clés) pour changer le cache selon le contexte. Attention quand même car ces arguments de variante ne sont pas passés au partial. En réalité, ils servent uniquement à nommer l’entrée de cache. Si vous devez passer plus de données au partial, mettez-les dans le context via un dict.
Je regroupe tout avec resources.Concat, puis minify et fingerprint (SRI + cache-busting). Le preload déclenche le chargement au plus tôt, et le link classique prend le relais.
Côté JavaScript, j’utilise js.Build (esbuild) et je bascule les sourcemaps selon l’environnement :
J’ai également une approche hybride concernant la gestion des images. J’utilise Cloudflare Image Resizing qui génère les variantes côté CDN, et un partial Hugo prépare le srcset + LCP propre.
Comme vous pouvez le voir, j’adapte la qualité selon la plateforme (85% pour mobile / 92% pour desktop), le format AVIF par défaut, et pour l’image LCP, je mets fetchpriority="high" et pas de lazy.
Cache des ressources - Le secret des rebuilds rapides
Configurez aussi les caches pour éviter de retraiter à chaque build. Le plus important c’est le cache permanent pour les images et autres assets traités.
# hugo.toml
[caches]
[caches.getJSON]
dir = ":cacheDir/:project"
maxAge = "1h"
[caches.getCSV]
dir = ":cacheDir/:project"
maxAge = "1h"
[caches.images]
dir = ":resourceDir/_gen"
maxAge = -1 # NE JAMAIS expirer
[caches.assets]
dir = ":resourceDir/_gen"
maxAge = -1
Et en cas de besoin, pour forcer un refresh : hugo server --ignoreCache.
Organisation des templates - site.RegularPages est votre ami
En régle générale, c’est mieux d’éviter de boucler sur des pages inutiles (taxonomies, terms…). Utilisez aussi site.RegularPages plutôt que .Site.Pages.
Voici également quelques réglages utiles dans mon hugo.toml :
# Désactiver ce qu'on n'utilise pasdisableKinds=["section"]# Pagination moderne (Hugo ≥ 0.128)[pagination]pagerSize=39# 39 articles par page# Traitement d'images[imaging]quality=80resampleFilter="Lanczos"# Optimisations de build[build]writeStats=falsenoJSConfigInAssets=trueuseResourceCacheWhen="always"# Mounts: exclure fichiers lourds[module][[module.mounts]]source="content"target="content"excludeFiles=["**/*.zip","**/*.log","**/backup/**","**/archives/**","**/exports/**"][[module.mounts]]source="static"target="static"excludeFiles=["**/*.zip","**/*.log","**/backup/**","**/archives/**"]
Je mets aussi un timeout large (timeout = "600s") et j’ignore certains warnings verbeux (ignoreLogs = ['warning-goldmark-raw-html']). Et pour la pagination, pagerSize a aussi remplacé les vieux réglages (bon à savoir si vous migrez).
Perso, j’utilise uniquement les flags suivants quand je lance Hugo :
Nettoyage : hugo --gc --cleanDestinationDir pour virer l’obsolète et garder public/ clean.
Dev rapide : gardez hugo server tel quel. --disableFastRender seulement si un glitch l’exige. --renderToMemory peut accélérer (au prix de la RAM).
Profiler de templates : hugo --templateMetrics --templateMetricsHints liste les templates lents et où placer vos partialCached. C’est comme ça que j’ai vu que ma sidebar coûtait une plombe.
Conditionnez ce que vous chargez
Selon la page, j’adapte aussi mon code. L’image LCP avec fetchpriority="high" (pour éviter le lazy), le reste en lazy + placeholder SVG qui respecte les dimensions (zéro layout shift). Et pour le JS, defer partout et pas de scripts inutiles sur les pages qui n’en ont pas besoin.
Le pattern qui tue - partialCached + variantes calculées
Mon combo préféré, selon le contexte c’est celui-ci :
Il faut comme ça trouver le bon équilibre. C’est à dire avoir assez de variantes pour éviter les recalculs, mais pas trop, sinon votre cache devient inutile.
Et en bonus - Ma checklist express !
Remplacer les partial chauds par partialCached + variantes propres (au minimum : header, footer, nav, sidebar).
getJSON : config de cache (maxAge) et --ignoreCache en dev.
--templateMetrics + --templateMetricsHints pour viser les pires templates.
Pagination : passer à [pagination].pagerSize si vous migrez.
Utiliser site.RegularPages au lieu de .Site.Pages dans les boucles.
Module mounts avec excludeFiles pour éviter que Hugo scanne backups/archives.
Prod : --gc + --cleanDestinationDir + --minify.
Cache permanent pour images/assets (maxAge = -1).
Voilà. Avec tout ça, je suis passé de plusieurs heures à quelques minutes pour ~60 000 pages. Les clés : partialCached partout où la sortie ne bouge pas, un bundle CSS/JS propre avec fingerprint/SRI, et site.RegularPages pour ne pas trimbaler les taxonomies dans les boucles.
N’oubliez pas de lancer hugo --templateMetrics --templateMetricsHints pour trouver ce qui coûte cher lors de la génération. Vous verrez, dans 90% des cas c’est un partial appelé 10 000 fois non mis en cache, ou une boucle sur .Site.Pages trop large. Réparez ça, et votre build respira de nouveau.
Et si après tout ça votre build met encore plus de 10 s pour builder moins de 1000 pages, c’est qu’il y a un loup dans vos templates. Réduisez la surface des boucles, chassez les recalculs, et mettez partialCached partout où c’est pertinent !
18 milliards, c’est le nombre de mots de passe compromis auxquels GoSearch peut accéder avec une simple clé API BreachDirectory. Et ce n’est que la partie émergée de l’iceberg de cet outil OSINT qui a récemment été salué dans la newsletter OSINT pour son approche innovante de la recherche d’empreintes numériques.
Vous vous souvenez de Sherlock, cet outil Python qui permettait de chercher des pseudos sur différentes plateformes ? Et bien GoSearch, c’est comme si Sherlock avait pris des stéroïdes et appris le Go. En effet, le développeur ibnaleem a créé ce projet au départ pour apprendre le langage Go, mais il s’est rapidement transformé en un véritable projet communautaire.
La différence fondamentale avec Sherlock c’est d’abord sa vitesse. Le Go se compile en binaire et utilise la concurrence de manière native, ce qui rend les recherches exponentiellement plus rapides. Mais surtout, GoSearch a résolu le problème majeur de Sherlock c’est à dire les faux négatifs. Quand Sherlock vous dit qu’un username n’existe pas alors qu’il est bien là, GoSearch le trouve. Et pour les résultats incertains, plutôt que de vous induire en erreur, il préfère les afficher en jaune pour vous signaler qu’il y a peut-être un doute.
Concrètement, GoSearch ne se contente pas de scanner plus de 300 sites web. Il accède aussi à 900 000 identifiants compromis via l’API HudsonRock’s Cybercrime Intelligence, 3,2 milliards via ProxyNova, et ces fameux 18 milliards via BreachDirectory si vous avez une clé API. Et quand il trouve des hashes de mots de passe, il tente de les cracker avec Weakpass, avec un taux de réussite proche de 100% selon le développeur (ahem…).
L’installation est ridiculement simple pour un outil aussi puissant :
go install github.com/ibnaleem/gosearch@latest
Ensuite, une recherche basique :
gosearch -u [username] --no-false-positives
Le flag --no-false-positives est important puisqu’il filtre les résultats pour ne montrer que ceux dont GoSearch est certain. Par exemple, pour une recherche approfondie avec BreachDirectory :
Ce qui est cool, c’est que GoSearch ne se limite pas aux pseudos. Il cherche aussi les domaines associés en testant les TLDs classiques (.com, .net, .org, etc.). Et si vous n’avez pas de pseudo précis, vous pouvez même utiliser username-anarchy pour générer des variantes à partir d’un nom et prénom.
Attention toutefois, sous Windows, Windows Defender peut parfois marquer GoSearch comme malware. C’est un faux positif et le code source est entièrement accessible sur GitHub pour vérification.
GoSearch est particulièrement efficace pour les enquêtes de sécurité et de confidentialité. Les entreprises peuvent par exemple l’utiliser pour vérifier si leurs employés ont des comptes compromis, les particuliers pour auditer leur propre empreinte numérique, et les chercheurs en sécurité pour leurs investigations OSINT.
En plus, le projet évolue constamment et les dev envisagent d’ajouter des fonctionnalités comme des options pour n’afficher que les résultats confirmés ou prioriser la détection des faux négatifs selon les besoins. Maintenant, pour ceux qui cherchent des alternatives, il existe Gopher Find (aussi en Go), Maigret, WhatsMyName ou le récent User Searcher qui prétend couvrir 2000+ sites. Mais GoSearch reste le plus équilibré entre vitesse, précision et accès aux bases de données d’identifiants compromis.