Joan León's Avatar

Joan León

@nucliweb.net

⚡️ Web Performance Artisan at @perf.reviews | Google Dev Expert in Web Tech | Cloudinary Ambassador | ❤️ Image Optimization | Girona

1,776
Followers
490
Following
549
Posts
26.04.2023
Joined
Posts Following

Latest posts by Joan León @nucliweb.net

Image Optimization Workshop, Imágenes que llegan como las diseñaste | Workshops - nucliweb Aprende a exportar, optimizar y entregar activos visuales que mantienen la calidad de tu diseño en producción. 6 sesiones prácticas sobre formatos, herramientas, flujo Figma-a-web y automatización del...

Optimizar imágenes no es solo “comprimir más”.

Va de entender formatos, responsive images, estrategias de carga y su impacto en Core Web Vitals.

Justo esto es lo que cubro en este workshop ↓
www.nucliweb.net/workshops/im...

10.03.2026 16:42 👍 0 🔁 0 💬 0 📌 0

Y casi siempre los problemas vienen de lo mismo:

• imágenes más grandes de lo necesario
• usar PNG/JPEG cuando WebP o AVIF serían mejores
• no usar srcset ni sizes
• lazy-loading mal aplicado
• GIFs enormes que deberían ser vídeo

10.03.2026 16:42 👍 1 🔁 0 💬 1 📌 0
Tabla que compara el tamaño de varias imágenes en distintos formatos. La columna PNG (original) muestra archivos de entre 2.32 MB y 3.29 MB para varias fotos (IMG_3248.png, IMG_5511.png, IMG_5666.png, IMG_5673.png, IMG_5705.png). Al optimizarlas:
	•	MozJPEG: entre 172 kB y 283 kB
	•	WebP: entre 145 kB y 311 kB
	•	AVIF: entre 38 kB y 86.8 kB

También aparece un ejemplo pequeño (YouTube-banner.png) que pasa de 43.8 kB en PNG a 12.8 kB en MozJPEG, 8.53 kB en WebP y 2.95 kB en AVIF.
La tabla ilustra cómo cambiar de formato puede reducir el tamaño de las imágenes de varios megabytes a solo decenas de kilobytes.

Tabla que compara el tamaño de varias imágenes en distintos formatos. La columna PNG (original) muestra archivos de entre 2.32 MB y 3.29 MB para varias fotos (IMG_3248.png, IMG_5511.png, IMG_5666.png, IMG_5673.png, IMG_5705.png). Al optimizarlas: • MozJPEG: entre 172 kB y 283 kB • WebP: entre 145 kB y 311 kB • AVIF: entre 38 kB y 86.8 kB También aparece un ejemplo pequeño (YouTube-banner.png) que pasa de 43.8 kB en PNG a 12.8 kB en MozJPEG, 8.53 kB en WebP y 2.95 kB en AVIF. La tabla ilustra cómo cambiar de formato puede reducir el tamaño de las imágenes de varios megabytes a solo decenas de kilobytes.

Ejemplo real optimizando imágenes:

PNG → MozJPEG → WebP → AVIF

La diferencia puede ser de varios megabytes a solo decenas de kB.

10.03.2026 16:42 👍 0 🔁 0 💬 1 📌 0

Muchas webs siguen sirviendo imágenes PNG de 2–3 MB.

Pero esas mismas imágenes pueden pesar menos de 50 kB.

La optimización de imágenes sigue siendo uno de los mayores problemas de rendimiento en la web.

Hilo 👇

10.03.2026 16:42 👍 1 🔁 0 💬 1 📌 0
Preview
WebPerf Snippets: progressive disclosure in Claude Skills | Joan León Applying Anthropic's progressive disclosure system (L1/L2/L3) to reduce the context loaded by WebPerf Snippets Skills and free space in the agent's context window.

joanleon.dev/en/webperf-s...

10.03.2026 15:39 👍 0 🔁 0 💬 0 📌 0
Table titled “Results” showing reductions in JavaScript bundle sizes for web performance features. Columns: Skill, Before, After, and Reduction.
	•	webperf-loading: 24,199 B → 11,149 B (−54%)
	•	webperf-core-web-vitals: 13,890 B → 10,266 B (−26%)
	•	webperf-interaction: 17,143 B → 12,443 B (−27%)
	•	webperf-media: 13,273 B → 12,017 B (−9%)
	•	webperf-resources: 11,700 B → 11,026 B (−6%)
	•	Total L2: 82,916 B → 59,612 B (−28%)

The table highlights overall bundle size reduction after optimization.

Table titled “Results” showing reductions in JavaScript bundle sizes for web performance features. Columns: Skill, Before, After, and Reduction. • webperf-loading: 24,199 B → 11,149 B (−54%) • webperf-core-web-vitals: 13,890 B → 10,266 B (−26%) • webperf-interaction: 17,143 B → 12,443 B (−27%) • webperf-media: 13,273 B → 12,017 B (−9%) • webperf-resources: 11,700 B → 11,026 B (−6%) • Total L2: 82,916 B → 59,612 B (−28%) The table highlights overall bundle size reduction after optimization.

When a Skill activates, its SKILL.md loads into context. The webperf-loading was 24 KB, most of it unnecessary to decide which script to run

I applied progressive disclosure and brought it down to 11 KB

#WebPerf #Performance #AI #AIAgent #AIPerf

10.03.2026 15:39 👍 1 🔁 1 💬 1 📌 0

Improve Your Website's Performance
perf.reviews/en

#WebPerf #Performance

10.03.2026 09:10 👍 0 🔁 0 💬 0 📌 0
⚡Featured posts this week from Perf Links by WebPerformance Report:

⚡Featured posts this week from Perf Links by WebPerformance Report:

⚡Featured posts this week:
✨ WebPerf Snippets and Agent SKILLs: @nucliweb.net
✨ The UX Speed Museum: @sergeyche.dev
✨ The GEO Playbook: @kylerisley.bsky.social
✨ What Are Agent Skills?: @debbie.codes
🙏 Special thanks to the authors!
#webperf

08.03.2026 11:28 👍 4 🔁 2 💬 1 📌 0
Preview
WebPerf Snippets agent-first: structured returns and minimal tokens | Joan León WebPerf Snippets scripts now return structured JSON directly from evaluate_script() and are minified at build time with dead code elimination, significantly reducing token footprint.

joanleon.dev/en/webperf-s...

08.03.2026 11:25 👍 0 🔁 0 💬 0 📌 0
Stylized screenshot of a dark code editor window titled “WebPerf Snippets agent-first: structured returns and minimal tokens.” It contrasts two approaches:
	•	Before: an agent parsing a console string like “🟢 LCP: 1.24s (good)”.
	•	After: a structured JSON-like object containing performance data for the Largest Contentful Paint (LCP) metric, including fields such as script: "LCP", status: "ok", metric: "LCP", value: 1240, unit: "ms", rating: "good", thresholds for good and needs improvement, and details about the measured element (img.hero, hero.avif, sizePixels: 756000).

The graphic illustrates the shift from parsing human-readable console output to returning structured performance data for agents.

Stylized screenshot of a dark code editor window titled “WebPerf Snippets agent-first: structured returns and minimal tokens.” It contrasts two approaches: • Before: an agent parsing a console string like “🟢 LCP: 1.24s (good)”. • After: a structured JSON-like object containing performance data for the Largest Contentful Paint (LCP) metric, including fields such as script: "LCP", status: "ok", metric: "LCP", value: 1240, unit: "ms", rating: "good", thresholds for good and needs improvement, and details about the measured element (img.hero, hero.avif, sizePixels: 756000). The graphic illustrates the shift from parsing human-readable console output to returning structured performance data for agents.

WebPerf Snippets agent-first

WebPerf Snippets SKILLs were written for humans: emojis, colours, tables.

The agent had to parse all of that.

I added structured JSON returns and a build with terser that removes the console code. 80 lines → ~300 characters.

#WebPerf #AI #Performance

08.03.2026 11:25 👍 3 🔁 1 💬 1 📌 0
Video thumbnail

📌 In this brief clip, @sneyers.info underscores the surging industry support for JPEG XL, tracking the momentum that ultimately led to its growing adoption across major browsers. 🎬 ✨ SPDY STREAM 024 ✨, in viewports soon.

06.03.2026 18:14 👍 5 🔁 2 💬 0 📌 0
Post image Post image Post image Post image
06.03.2026 09:19 👍 1 🔁 0 💬 0 📌 1

The JPEG XL Image Coding System
History, Features, Coding Tools, Design Rationale, and Future

arxiv.org/pdf/2506.05987

#Image #JpegXL

06.03.2026 09:13 👍 3 🔁 1 💬 1 📌 0
Preview
Request for developer feedback: focusgroup  |  Blog  |  Chrome for Developers Try out focusgroup and comment on the proposal.

Open UI has been working on speccing out the focusgroup attribute: a declarative way to support roving focus & add keyboard nav to composite widgets like toolbars/menus

We'd love your feedback!

Learn more & see open questions: developer.chrome.com/blog/focusgr...

H/t to Edge folks for prototyping

05.03.2026 16:54 👍 73 🔁 22 💬 8 📌 3
Preview
WebPerf Snippets and Agent SKILLs: deterministic audits with Chrome DevTools MCP | Joan León WebPerf Snippets become Agent SKILLs with scripts as deterministic tools for AI agents, executable directly in the browser via Chrome DevTools MCP.

In the article:

• Architecture of the 6 SKILLs (CWV, Loading, Interaction, Media...)
• Workflows with decision trees: if TTFB > 600ms → run Sub-Parts.js
• Install: npx skills add nucliweb/webperf-snippets

joanleon.dev/en/webperf-s...

#WebPerf #WebPerformance #AI #DevTools #MCP

04.03.2026 15:21 👍 4 🔁 0 💬 0 📌 0

Result: with a single-line prompt I detected 7 scripts from the Usercentrics consent banner with the Preload + Async anti-pattern on a Cocunat product page.

Detailed diagnosis and fix options. Autonomously.

04.03.2026 15:21 👍 0 🔁 0 💬 1 📌 0

What I've applied: scripts are .js files inside the SKILL.
The agent reads and executes them via Chrome DevTools MCP.

Same code every time. Deterministic.

04.03.2026 15:21 👍 0 🔁 0 💬 1 📌 0

The easy option: JavaScript inline in the SKILL markdown.

The problem: thousands of tokens on every invocation, even if only one script is needed. And nothing guarantees the LLM runs the code exactly as written.

04.03.2026 15:21 👍 0 🔁 0 💬 1 📌 0
WebPerf Snippets and Agent SKILLs: deterministic audits with Chrome DevTools MCP

WebPerf Snippets and Agent SKILLs: deterministic audits with Chrome DevTools MCP

Claude Code report showing Usercentrics scripts causing performance issues by combining 'preload' and 'async'. It recommends removing preloads or using fetchpriority='low' to avoid competing with critical LCP resources.

Claude Code report showing Usercentrics scripts causing performance issues by combining 'preload' and 'async'. It recommends removing preloads or using fetchpriority='low' to avoid competing with critical LCP resources.

I've been using WebPerf Snippets in my audits for years.
Scripts to measure LCP, INP, CLS, TTFB, Render Blocking...

The next step: turning them into tools an AI agent can use autonomously.
But there's a design decision that makes all the difference.

🧵

#WebPerf #WebPerformance #AI #DevTools #MCP

04.03.2026 15:21 👍 9 🔁 4 💬 1 📌 0
Preview
a drawing of a person loading a virtual hug ALT: a drawing of a person loading a virtual hug

Espero que todo vaya bien

04.03.2026 13:02 👍 0 🔁 0 💬 0 📌 0
Video thumbnail

Twang

editor.p5js.org/isohedral/fu...

04.03.2026 10:15 👍 24 🔁 5 💬 1 📌 0

For the image that ends up being the LCP element, none, that’s why I delete it.

But it seems that we have disclosed a lot about loading=lazy and decoding=async for images outside the viewport, and the models are what they suggest by default 🫠

03.03.2026 23:35 👍 1 🔁 0 💬 1 📌 0

And the height attribute too, to avoid to impact to the CLS 😉

03.03.2026 19:54 👍 2 🔁 0 💬 0 📌 0

This would be a great addition to every CMS, as a page is published/updated, right before it is cached! 🥰

03.03.2026 19:48 👍 1 🔁 1 💬 1 📌 0
Post image

Taught Claude Code to prioritise loading the first image in a post 😉

#WebPerf

03.03.2026 18:46 👍 4 🔁 1 💬 1 📌 1
Preview
GitHub - lala-hakobyan/front-end-debugging-handbook: A comprehensive guide to debugging tools for modern, complex front-end applications. This handbook provides practical, real-world guidance on a com... A comprehensive guide to debugging tools for modern, complex front-end applications. This handbook provides practical, real-world guidance on a complete suite of tools, from Chrome DevTools and fra...

Ever wanted a comprehensive guide to DevTools and debugging front ends? Check out this ebook that Lala Hakobyan just launched:

github.com/lala-hakobya...

I’m impressed!!

26.02.2026 17:25 👍 27 🔁 10 💬 0 📌 0
“Practical guide to the img element: from the basics to LCP” title, author’s name Joan León, code snippets, table of contents, and hashtags: images, webperf, core-web-vitals, html.

“Practical guide to the img element: from the basics to LCP” title, author’s name Joan León, code snippets, table of contents, and hashtags: images, webperf, core-web-vitals, html.

Practical guide to the <img> element: from basics to LCP. @nucliweb.net shows how srcset, sizes, modern formats AVIF and WebP via <picture>, fetchpriority, preload for the LCP image, and CDNs can improve Core Web Vitals. #performance #html

joanleon.dev/en/guia-prac...

26.02.2026 12:47 👍 14 🔁 4 💬 0 📌 0

Interested in the @httparchive.org and not sure where to start? During the @performanceobserver.dev meetup tomorrow (12:30pm ET), I'm going to be providing an overview of the HTTP Archive and demonstrate how to start querying it! performanceobserver.dev/events/episo...

25.02.2026 23:08 👍 9 🔁 6 💬 0 📌 1
Preview
Precompressed HTML at the Edge: Eleventy Meets Cloudflare Workers In this post, I will show you how I integrate Brotli level 11 compression directly into my 11ty build process to squeeze every possible byte out of my blog’s HTML.

New Blog post by me! Pre-compressing HTML to Brotli 11 using the #11ty build pipeline and serving via Cloudflare pages & a Cloudflare Worker #eleventy #webperf #perfmatters #cloudflare
nooshu.com/blog/2026/02...

23.02.2026 09:02 👍 8 🔁 2 💬 0 📌 0
Joan Leon delivering a Web Performance training session to a group of professionals, pointing at a large screen displaying web development tools while attendees listen seated in a training room.

Joan Leon delivering a Web Performance training session to a group of professionals, pointing at a large screen displaying web development tools while attendees listen seated in a training room.

Detail of La Pedrera’s façade featuring its distinctive wrought iron balconies and wavy stone shapes, seen from street level and from a balcony overlooking the avenue.

Detail of La Pedrera’s façade featuring its distinctive wrought iron balconies and wavy stone shapes, seen from street level and from a balcony overlooking the avenue.

Last week I delivered a Web Performance training for part of the Basetis technical team: 2 days of theory and hands-on practice with real cases. We covered Core Web Vitals, RUM & Lab monitoring, Chrome DevTools, Lighthouse CI, Playwright and more... at the iconic La Pedrera.

#WebPerf #Training

23.02.2026 09:19 👍 6 🔁 1 💬 0 📌 0