<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Performance on Commentary of Takao</title><link>https://takao.blog/es/tags/performance/</link><description>Recent content in Performance on Commentary of Takao</description><generator>Hugo -- gohugo.io</generator><language>es</language><copyright>Commentary of Takao</copyright><lastBuildDate>Sun, 12 Jul 2026 04:12:51 +0900</lastBuildDate><atom:link href="https://takao.blog/es/tags/performance/index.xml" rel="self" type="application/rss+xml"/><item><title>Herramientas de monitoreo de rendimiento web 2026</title><link>https://takao.blog/es/web/web-performance-monitoring-tools-2026/</link><pubDate>Wed, 08 Jul 2026 10:00:00 +0900</pubDate><guid>https://takao.blog/es/web/web-performance-monitoring-tools-2026/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/web-performance-monitoring-tools-2026-es.png" alt="Featured image of post Herramientas de monitoreo de rendimiento web 2026" /&gt;&lt;p&gt;El monitoreo de rendimiento web (RUM) captura datos reales de usuarios. Combinado con laboratorio (Lighthouse), da una visión completa del rendimiento.&lt;/p&gt;
&lt;h2 id="rum-real-user-monitoring"&gt;RUM (Real User Monitoring)
&lt;/h2&gt;&lt;p&gt;Mide usuarios reales. Captura Core Web Vitals (LCP, INP, CLS), TTFB, FCP, TBT. Library &lt;code&gt;web-vitals&lt;/code&gt; para envío a Analytics.&lt;/p&gt;
&lt;h2 id="herramientas"&gt;Herramientas
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;CrUX&lt;/strong&gt; (Chrome UX Report): datos de campo agregados. &lt;strong&gt;Lighthouse&lt;/strong&gt;: laboratorio. &lt;strong&gt;PageSpeed Insights&lt;/strong&gt;: combina ambos. &lt;strong&gt;WebPageTest&lt;/strong&gt;: análisis detallado.&lt;/p&gt;
&lt;h2 id="monitoreo-continuo"&gt;Monitoreo continuo
&lt;/h2&gt;&lt;p&gt;Alertas cuando las métricas superan umbrales. Dashboard con tendencias. Presupuesto de rendimiento en CI. Regresión = build fallido.&lt;/p&gt;</description></item><item><title>CSS Containment: Aislamiento de renderizado para rendimiento</title><link>https://takao.blog/es/web/performance-css-contain-property/</link><pubDate>Mon, 15 Jun 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/performance-css-contain-property/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/performance-css-contain-property-es.png" alt="Featured image of post CSS Containment: Aislamiento de renderizado para rendimiento" /&gt;&lt;p&gt;La propiedad CSS &lt;code&gt;contain&lt;/code&gt; permite aislar subárboles del DOM para que el navegador pueda optimizar el renderizado independientemente del resto de la página.&lt;/p&gt;
&lt;h2 id="valores-de-contain"&gt;Valores de contain
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;layout&lt;/code&gt;: el layout interno no afecta al exterior. &lt;code&gt;style&lt;/code&gt;: los estilos no se escapan. &lt;code&gt;paint&lt;/code&gt;: el elemento pinta dentro de sus bounds. &lt;code&gt;size&lt;/code&gt;: el elemento necesita dimensiones explícitas.&lt;/p&gt;
&lt;h2 id="content-visibility"&gt;content-visibility
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;content-visibility: auto&lt;/code&gt; combina containment con lazy rendering. Los elementos fuera de pantalla no se renderizan hasta que se acercan al viewport. Mejora drásticamente LCP en páginas largas.&lt;/p&gt;</description></item><item><title>DNS-prefetch y Preconnect: Optimización de conexiones de red</title><link>https://takao.blog/es/web/performance-dns-prefetch-preconnect/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/performance-dns-prefetch-preconnect/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/performance-dns-prefetch-preconnect-es.png" alt="Featured image of post DNS-prefetch y Preconnect: Optimización de conexiones de red" /&gt;&lt;p&gt;DNS-prefetch y preconnect reducen la latencia de conexiones a orígenes externos resolviendo DNS y estableciendo conexiones TCP/SSL antes de que se necesiten.&lt;/p&gt;
&lt;h2 id="dns-prefetch"&gt;DNS-prefetch
&lt;/h2&gt;&lt;p&gt;Resuelve DNS de dominios externos antes de que el navegador los solicite. Útil para recursos en CDNs, APIs y fuentes.&lt;/p&gt;
&lt;h2 id="preconnect"&gt;Preconnect
&lt;/h2&gt;&lt;p&gt;Además de DNS, establece la conexión TCP y el handshake TLS. Más costoso pero más efectivo. Usar solo para los orígenes más críticos (3-4 máximo).&lt;/p&gt;
&lt;h2 id="implementación"&gt;Implementación
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;link&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;rel&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;dns-prefetch&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;href&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;https://fonts.googleapis.com&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;link&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;rel&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;preconnect&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;href&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;https://fonts.gstatic.com&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;crossorigin&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="cuándo-usar-cuál"&gt;Cuándo usar cuál
&lt;/h2&gt;&lt;p&gt;DNS-prefetch: recursos de terceros que no son críticos. Preconnect: orígenes que se usan en los primeros segundos de carga. Preconnect sin crossorigin puede filtrar datos.&lt;/p&gt;</description></item><item><title>Optimización de carga de fuentes web</title><link>https://takao.blog/es/web/performance-fonts-loading-optimization/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/performance-fonts-loading-optimization/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/performance-fonts-loading-optimization-es.png" alt="Featured image of post Optimización de carga de fuentes web" /&gt;&lt;p&gt;Las fuentes web pueden causar FOIT (Flash of Invisible Text) o FOUT (Flash of Unstyled Text). Optimizar su carga mejora LCP y la experiencia de lectura.&lt;/p&gt;
&lt;h2 id="font-display"&gt;font-display
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;font-display: swap&lt;/code&gt;: muestra texto con fuente del sistema mientras carga. &lt;code&gt;font-display: optional&lt;/code&gt;: no descarga si la red es lenta. &lt;code&gt;font-display: block&lt;/code&gt;: período de bloqueo corto.&lt;/p&gt;
&lt;h2 id="subset-de-fuentes"&gt;Subset de fuentes
&lt;/h2&gt;&lt;p&gt;Incluye solo los caracteres necesarios (latino básico, no todos los glifos). Herramientas: &lt;code&gt;glyphhanger&lt;/code&gt;, &lt;code&gt;fonttools&lt;/code&gt;. Reduce drásticamente el tamaño de archivos.&lt;/p&gt;</description></item><item><title>React Compiler: Di adiós a la memoización manual</title><link>https://takao.blog/es/web/react-compiler-automated-memoization/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/react-compiler-automated-memoization/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/react-compiler-automated-memoization-es.png" alt="Featured image of post React Compiler: Di adiós a la memoización manual" /&gt;&lt;h2 id="introducción"&gt;Introducción
&lt;/h2&gt;&lt;p&gt;El React Compiler (antes React Forget) es una herramienta de compilación que memoiza automáticamente componentes, hooks y valores de React analizando dependencias reactivas en tiempo de compilación.&lt;/p&gt;
&lt;h2 id="el-problema-de-la-memoización-manual"&gt;El problema de la memoización manual
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;useMemo&lt;/code&gt;, &lt;code&gt;useCallback&lt;/code&gt;, &lt;code&gt;React.memo&lt;/code&gt; son verbosos, propensos a errores y fáciles de olvidar. Un &lt;code&gt;useMemo&lt;/code&gt; faltante causa re-renderizados innecesarios; un array de dependencias incorrecto causa closures obsoletas.&lt;/p&gt;
&lt;h2 id="cómo-funciona"&gt;Cómo funciona
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Detección de valores reactivos (AST). 2. Construcción de grafo de dependencias. 3. Generación de código optimizado con caché integrada.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="lo-que-puedes-eliminar"&gt;Lo que puedes eliminar
&lt;/h2&gt;&lt;p&gt;Con el React Compiler activado ya no necesitas: &lt;code&gt;useMemo()&lt;/code&gt;, &lt;code&gt;useCallback()&lt;/code&gt;, &lt;code&gt;React.memo()&lt;/code&gt;, ni arrays de dependencias manuales.&lt;/p&gt;</description></item><item><title>Optimizaciones del Critical Rendering Path</title><link>https://takao.blog/es/web/performance-critical-rendering-path-optimizations/</link><pubDate>Sat, 20 Dec 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/performance-critical-rendering-path-optimizations/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/performance-critical-rendering-path-optimizations-es.png" alt="Featured image of post Optimizaciones del Critical Rendering Path" /&gt;&lt;p&gt;El Critical Rendering Path (CRP) es la secuencia de pasos que el navegador sigue para renderizar la página inicial. Optimizarlo mejora LCP y First Paint.&lt;/p&gt;
&lt;h2 id="bloqueo-de-renderizado"&gt;Bloqueo de renderizado
&lt;/h2&gt;&lt;p&gt;CSS bloquea el renderizado. JavaScript bloquea el parsing de HTML. Reduce el CSS crítico e inlinealo. Difiere JS no crítico con &lt;code&gt;defer&lt;/code&gt; o &lt;code&gt;async&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="css-crítico"&gt;CSS crítico
&lt;/h2&gt;&lt;p&gt;Extrae el CSS necesario para el contenido above-the-fold. Inlinealo en &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;. Carga el resto asíncronamente. Herramientas: Critical, Penthouse.&lt;/p&gt;</description></item><item><title>Previniendo el Cumulative Layout Shift con CSS aspect-ratio</title><link>https://takao.blog/es/web/css-aspect-ratio-cumulative-layout-shift/</link><pubDate>Wed, 10 Dec 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/css-aspect-ratio-cumulative-layout-shift/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/css-aspect-ratio-cumulative-layout-shift-es.png" alt="Featured image of post Previniendo el Cumulative Layout Shift con CSS aspect-ratio" /&gt;&lt;h2 id="entendiendo-cumulative-layout-shift"&gt;Entendiendo Cumulative Layout Shift
&lt;/h2&gt;&lt;p&gt;CLS es una métrica de Core Web Vitals que mide la estabilidad visual. Un CLS alto daña la experiencia de usuario y el SEO. La causa principal son elementos multimedia que cargan sin espacio reservado.&lt;/p&gt;
&lt;h2 id="cómo-funciona-aspect-ratio"&gt;Cómo funciona aspect-ratio
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;aspect-ratio&lt;/code&gt; declara la proporción ancho/alto de un elemento. El navegador reserva espacio, evitando saltos de layout.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;responsive-video&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;aspect-ratio&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;16&lt;/span&gt; &lt;span style="color:#f92672"&gt;/&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;9&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;%&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;auto&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="uso-con-imágenes"&gt;Uso con imágenes
&lt;/h2&gt;&lt;p&gt;Reemplaza el viejo truco de padding-bottom. Combina con &lt;code&gt;max-width&lt;/code&gt; y &lt;code&gt;object-fit&lt;/code&gt; para resultados óptimos.&lt;/p&gt;</description></item><item><title>Caché de build en Docker: Acelerar compilaciones</title><link>https://takao.blog/es/web/docker-build-caches-speedup/</link><pubDate>Sat, 20 Sep 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/docker-build-caches-speedup/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/docker-build-caches-speedup-es.png" alt="Featured image of post Caché de build en Docker: Acelerar compilaciones" /&gt;&lt;p&gt;Docker aprovecha la caché de capas para acelerar builds. Entender el orden de las capas y la invalidación de caché es clave para builds rápidos.&lt;/p&gt;
&lt;h2 id="orden-de-capas"&gt;Orden de capas
&lt;/h2&gt;&lt;p&gt;Coloca las capas que cambian con menos frecuencia al inicio: dependencias del sistema, luego dependencias de la aplicación, luego código fuente.&lt;/p&gt;
&lt;h2 id="copy-vs-add"&gt;COPY vs ADD
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;COPY&lt;/code&gt; invalida la caché si el contenido del archivo fuente cambia. Usa &lt;code&gt;.dockerignore&lt;/code&gt; para excluir archivos innecesarios (node_modules, .git).&lt;/p&gt;</description></item><item><title>Optimizaciones con requestIdleCallback</title><link>https://takao.blog/es/web/web-performance-requestidlecallback-optimizations/</link><pubDate>Fri, 25 Jul 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/web-performance-requestidlecallback-optimizations/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/web-performance-requestidlecallback-optimizations-es.png" alt="Featured image of post Optimizaciones con requestIdleCallback" /&gt;&lt;p&gt;&lt;code&gt;requestIdleCallback&lt;/code&gt; programa tareas no urgentes para cuando el navegador está inactivo. Mejora la capacidad de respuesta de la página.&lt;/p&gt;
&lt;h2 id="cómo-funciona"&gt;Cómo funciona
&lt;/h2&gt;&lt;p&gt;El navegador ejecuta callbacks en los tiempos muertos entre frames. &lt;code&gt;requestIdleCallback(callback, { timeout: 2000 })&lt;/code&gt;. &lt;code&gt;IdleDeadline.timeRemaining()&lt;/code&gt; indica el tiempo disponible.&lt;/p&gt;
&lt;h2 id="casos-de-uso"&gt;Casos de uso
&lt;/h2&gt;&lt;p&gt;Análisis (analytics), logging, precarga de datos no críticos, cleanups, procesamiento diferido, renderizado de contenido secundario.&lt;/p&gt;
&lt;h2 id="alternativas"&gt;Alternativas
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;setTimeout&lt;/code&gt; con 0: menos eficiente. &lt;code&gt;Scheduler.postTask&lt;/code&gt; (experimental) con prioridades. &lt;code&gt;requestAnimationFrame&lt;/code&gt; para animaciones. Elige según la urgencia.&lt;/p&gt;</description></item><item><title>Lazy loading de iframes para rendimiento web</title><link>https://takao.blog/es/web/web-performance-lazyloading-iframe/</link><pubDate>Sun, 20 Jul 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/web-performance-lazyloading-iframe/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/web-performance-lazyloading-iframe-es.png" alt="Featured image of post Lazy loading de iframes para rendimiento web" /&gt;&lt;p&gt;Los iframes cargan documentos completos (HTML, CSS, JS) que pueden pesar varios MB. El lazy loading nativo y técnicas avanzadas mejoran el rendimiento.&lt;/p&gt;
&lt;h2 id="loadinglazy-nativo"&gt;loading=lazy nativo
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;&amp;lt;iframe loading=&amp;quot;lazy&amp;quot; src=&amp;quot;...&amp;quot;&amp;gt;&lt;/code&gt; difiere la carga hasta que el iframe está cerca del viewport. Soporte universal en navegadores modernos.&lt;/p&gt;
&lt;h2 id="intersection-observer"&gt;Intersection Observer
&lt;/h2&gt;&lt;p&gt;Carga el iframe solo cuando es visible. Control granular: margen de precarga, umbral de visibilidad. Ideal para integraciones complejas.&lt;/p&gt;
&lt;h2 id="alternativas-a-iframes"&gt;Alternativas a iframes
&lt;/h2&gt;&lt;p&gt;Embed con JavaScript ligero (widget API). Web Components. Contenido precargado y mostrado bajo demanda. Prefiere APIs sobre iframes.&lt;/p&gt;</description></item><item><title>Optimización de imágenes para rendimiento web</title><link>https://takao.blog/es/web/web-performance-image-optimizations/</link><pubDate>Tue, 15 Jul 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/web-performance-image-optimizations/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/web-performance-image-optimizations-es.png" alt="Featured image of post Optimización de imágenes para rendimiento web" /&gt;&lt;p&gt;Las imágenes son el recurso más pesado y común en la web. Optimizarlas correctamente mejora LCP, CLS y la experiencia general.&lt;/p&gt;
&lt;h2 id="formatos-modernos"&gt;Formatos modernos
&lt;/h2&gt;&lt;p&gt;AVIF: mejor compresión pero codificación lenta. WebP: equilibrio calidad/velocidad. JPEG XL: prometedor pero soporte limitado. Proporciona múltiples formatos con &lt;code&gt;&amp;lt;picture&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="carga-responsive"&gt;Carga responsive
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;srcset&lt;/code&gt; con diferentes tamaños. &lt;code&gt;sizes&lt;/code&gt; para indicar el espacio que ocupa la imagen. El navegador selecciona la imagen óptima.&lt;/p&gt;
&lt;h2 id="lazy-loading"&gt;Lazy loading
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;loading=&amp;quot;lazy&amp;quot;&lt;/code&gt; nativo para imágenes fuera del viewport. &lt;code&gt;fetchpriority=&amp;quot;high&amp;quot;&lt;/code&gt; para la LCP image. Intersection Observer para control granular.&lt;/p&gt;</description></item><item><title>useMemo y useCallback: Optimización de rendimiento en React</title><link>https://takao.blog/es/web/react-hooks-usememo-usecallback/</link><pubDate>Fri, 20 Jun 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/react-hooks-usememo-usecallback/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/react-hooks-usememo-usecallback-es.png" alt="Featured image of post useMemo y useCallback: Optimización de rendimiento en React" /&gt;&lt;p&gt;&lt;code&gt;useMemo&lt;/code&gt; memoiza valores calculados, &lt;code&gt;useCallback&lt;/code&gt; memoiza funciones. Ambos evitan trabajo innecesario en re-renderizados.&lt;/p&gt;
&lt;h2 id="usememo"&gt;useMemo
&lt;/h2&gt;&lt;p&gt;Solo recalcula el valor cuando cambian sus dependencias. Útil para cálculos costosos o para mantener referencias estables entre renderizados.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;sorted&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;useMemo&lt;/span&gt;(() =&amp;gt; &lt;span style="color:#a6e22e"&gt;items&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;sort&lt;/span&gt;(), [&lt;span style="color:#a6e22e"&gt;items&lt;/span&gt;]);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="usecallback"&gt;useCallback
&lt;/h2&gt;&lt;p&gt;Devuelve la misma función a menos que cambien las dependencias. Esencial para pasar callbacks a componentes hijos memoizados.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;handleClick&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;useCallback&lt;/span&gt;(() =&amp;gt; &lt;span style="color:#a6e22e"&gt;doSomething&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;id&lt;/span&gt;), [&lt;span style="color:#a6e22e"&gt;id&lt;/span&gt;]);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="cuándo-usarlos"&gt;Cuándo usarlos
&lt;/h2&gt;&lt;p&gt;No optimices prematuramente. Solo usa estos hooks cuando perfiles muestren un problema real. Con el React Compiler, estos hooks serán innecesarios.&lt;/p&gt;</description></item><item><title>Indexación de bases de datos: Fundamentos para desarrolladores</title><link>https://takao.blog/es/web/backend-database-indexing-basics/</link><pubDate>Sun, 25 May 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/backend-database-indexing-basics/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/backend-database-indexing-basics-es.png" alt="Featured image of post Indexación de bases de datos: Fundamentos para desarrolladores" /&gt;&lt;p&gt;Los índices de base de datos aceleran las consultas a costa de espacio y rendimiento de escritura. Entenderlos es esencial para aplicaciones escalables.&lt;/p&gt;
&lt;h2 id="cómo-funcionan"&gt;Cómo funcionan
&lt;/h2&gt;&lt;p&gt;Estructura de datos (B-tree, Hash, GiST) que mapea valores a ubicaciones. Sin índice: full table scan (O(n)). Con índice: búsqueda logarítmica (O(log n)).&lt;/p&gt;
&lt;h2 id="tipos-de-índices"&gt;Tipos de índices
&lt;/h2&gt;&lt;p&gt;Índice primario (clave primaria). Índice único (valores únicos). Índice compuesto (múltiples columnas). Índice parcial (WHERE). Índice de texto completo.&lt;/p&gt;</description></item><item><title>INP: Interaction to Next Paint - La nueva métrica de interactividad</title><link>https://takao.blog/es/web/performance-web-vitals-inp/</link><pubDate>Sat, 15 Mar 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/performance-web-vitals-inp/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/performance-web-vitals-inp-es.png" alt="Featured image of post INP: Interaction to Next Paint - La nueva métrica de interactividad" /&gt;&lt;p&gt;Interaction to Next Paint (INP) reemplaza First Input Delay (FID) como métrica de interactividad en Core Web Vitals. Mide la latencia de todas las interacciones, no solo la primera.&lt;/p&gt;
&lt;h2 id="cómo-se-mide-inp"&gt;Cómo se mide INP
&lt;/h2&gt;&lt;p&gt;Registra el tiempo desde que el usuario interactúa (click, tap, teclado) hasta el siguiente frame pintado. Considera las interacciones más lentas. Objetivo: &amp;lt; 200ms (bueno), &amp;lt; 500ms (mejorable).&lt;/p&gt;
&lt;h2 id="causas-de-inp-alto"&gt;Causas de INP alto
&lt;/h2&gt;&lt;p&gt;JavaScript síncrono pesado, re-renderizados grandes sin optimizar, tareas largas en el hilo principal (&amp;gt; 50ms), listeners complejos en eventos frecuentes.&lt;/p&gt;</description></item><item><title>Estrategias de caché en CDN</title><link>https://takao.blog/es/web/cdn-caching-strategies/</link><pubDate>Mon, 30 Dec 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/cdn-caching-strategies/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/cdn-caching-strategies-es.png" alt="Featured image of post Estrategias de caché en CDN" /&gt;&lt;p&gt;Las CDN almacenan contenido en servidores edge cercanos al usuario. Las estrategias de caché determinan qué, cuándo y cómo se almacena.&lt;/p&gt;
&lt;h2 id="cache-control"&gt;Cache-Control
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;public, max-age=31536000, immutable&lt;/code&gt; para recursos versionados. &lt;code&gt;no-cache&lt;/code&gt; para validar con el origen. &lt;code&gt;no-store&lt;/code&gt; para datos sensibles.&lt;/p&gt;
&lt;h2 id="invalidación-de-caché"&gt;Invalidación de caché
&lt;/h2&gt;&lt;p&gt;Por URL (nuevo hash en nombre de archivo). Por purga (API de CDN). Por TTL (cacheo por tiempo). Por tags (purga por etiqueta).&lt;/p&gt;
&lt;h2 id="estrategias-híbridas"&gt;Estrategias híbridas
&lt;/h2&gt;&lt;p&gt;Assets estáticos: caché larga con versionado. HTML: TTL corto o sin caché. APIs: caché por URL con stale-while-revalidate.&lt;/p&gt;</description></item><item><title>Rendimiento móvil: Optimización para dispositivos con recursos limitados</title><link>https://takao.blog/es/web/mobile-performance/</link><pubDate>Thu, 26 Dec 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/mobile-performance/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/mobile-performance-es.png" alt="Featured image of post Rendimiento móvil: Optimización para dispositivos con recursos limitados" /&gt;&lt;p&gt;Los dispositivos móviles tienen CPUs más lentas, menos memoria y redes más lentas. La optimización móvil requiere estrategias específicas.&lt;/p&gt;
&lt;h2 id="redes-lentas"&gt;Redes lentas
&lt;/h2&gt;&lt;p&gt;Minimiza el peso total de la página (&amp;lt; 1MB ideal). Usa la API Network Information para detectar conexiones lentas. Prioriza contenido crítico con lazy loading para el resto.&lt;/p&gt;
&lt;h2 id="memoria-limitada"&gt;Memoria limitada
&lt;/h2&gt;&lt;p&gt;Evita fugas de memoria con correcta limpieza de event listeners y observadores. Libera referencias a grandes buffers. Usa &lt;code&gt;performance.memory&lt;/code&gt; para monitoreo.&lt;/p&gt;</description></item><item><title>Rendimiento en Node.js: Optimización y profiling</title><link>https://takao.blog/es/web/nodejs-performance/</link><pubDate>Wed, 18 Dec 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/nodejs-performance/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/nodejs-performance-es.png" alt="Featured image of post Rendimiento en Node.js: Optimización y profiling" /&gt;&lt;p&gt;Node.js puede manejar alto rendimiento si se optimizan correctamente el bucle de eventos, la memoria y las operaciones asíncronas.&lt;/p&gt;
&lt;h2 id="bucle-de-eventos"&gt;Bucle de eventos
&lt;/h2&gt;&lt;p&gt;No bloquees el event loop con operaciones síncronas pesadas. Usa &lt;code&gt;setImmediate()&lt;/code&gt;, &lt;code&gt;nextTick()&lt;/code&gt; y &lt;code&gt;Worker Threads&lt;/code&gt; para descargar trabajo.&lt;/p&gt;
&lt;h2 id="profiling"&gt;Profiling
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;--inspect&lt;/code&gt; + Chrome DevTools para CPU profiling. &lt;code&gt;--prof&lt;/code&gt; para logs de V8. &lt;code&gt;clinic.js&lt;/code&gt; (Doctor, Bubbleprof, Flame) para diagnóstico visual.&lt;/p&gt;
&lt;h2 id="gestión-de-memoria"&gt;Gestión de memoria
&lt;/h2&gt;&lt;p&gt;Evita fugas con correcta limpieza de listeners y referencias. Usa &lt;code&gt;heapdump&lt;/code&gt; o &lt;code&gt;v8.writeHeapSnapshot()&lt;/code&gt;. Monitorea con &lt;code&gt;process.memoryUsage()&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>React Concurrent: Guía de renderizado concurrente</title><link>https://takao.blog/es/web/react-concurrent/</link><pubDate>Fri, 06 Dec 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/react-concurrent/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/react-concurrent-es.png" alt="Featured image of post React Concurrent: Guía de renderizado concurrente" /&gt;&lt;p&gt;El renderizado concurrente de React permite que React interrumpa el trabajo de renderizado para manejar eventos de mayor prioridad. Con React 18+, &lt;code&gt;startTransition&lt;/code&gt; y &lt;code&gt;useDeferredValue&lt;/code&gt; permiten actualizaciones no urgentes sin bloquear la UI.&lt;/p&gt;
&lt;h2 id="starttransition"&gt;startTransition
&lt;/h2&gt;&lt;p&gt;Marca una actualización de estado como transición. React puede interrumpirla para manejar eventos urgentes como entrada de teclado.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;startTransition&lt;/span&gt;(() =&amp;gt; { &lt;span style="color:#a6e22e"&gt;setSearchQuery&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;input&lt;/span&gt;); });
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="usedeferredvalue"&gt;useDeferredValue
&lt;/h2&gt;&lt;p&gt;Aplaza un valor para que React pueda mostrar contenido antiguo mientras carga el nuevo. Útil para búsquedas en listas grandes.&lt;/p&gt;</description></item><item><title>WebAssembly (WASM): Aplicaciones nativas en el navegador</title><link>https://takao.blog/es/web/wasm-browser-apps/</link><pubDate>Sat, 30 Nov 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/wasm-browser-apps/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/wasm-browser-apps-es.png" alt="Featured image of post WebAssembly (WASM): Aplicaciones nativas en el navegador" /&gt;&lt;p&gt;WebAssembly (WASM) ejecuta código compilado (C, C++, Rust, Go) en el navegador a velocidad casi nativa. Abre nuevas posibilidades para aplicaciones web.&lt;/p&gt;
&lt;h2 id="rendimiento"&gt;Rendimiento
&lt;/h2&gt;&lt;p&gt;WASM es 10-40% más lento que código nativo pero mucho más rápido que JavaScript para cálculos intensivos. Compilado a binario, parseado en microsegundos.&lt;/p&gt;
&lt;h2 id="ecosistema"&gt;Ecosistema
&lt;/h2&gt;&lt;p&gt;Rust + wasm-pack: el más popular. C/C++ con Emscripten. Go, Zig, Kotlin también compilan a WASM. WASI para WASM fuera del navegador.&lt;/p&gt;
&lt;h2 id="casos-de-uso"&gt;Casos de uso
&lt;/h2&gt;&lt;p&gt;Procesamiento de imagen/video, juegos, simulaciones, compiladores, ofimática, cifrado. Figma, AutoCAD, Google Earth usan WASM.&lt;/p&gt;</description></item><item><title>Scripts de terceros: Impacto en rendimiento y privacidad</title><link>https://takao.blog/es/web/third-party-scripts/</link><pubDate>Tue, 19 Nov 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/third-party-scripts/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/third-party-scripts-es.png" alt="Featured image of post Scripts de terceros: Impacto en rendimiento y privacidad" /&gt;&lt;p&gt;Los scripts de terceros (analytics, ads, widgets, chatbots) afectan el rendimiento y la privacidad. Gestionarlos correctamente es esencial para Core Web Vitals.&lt;/p&gt;
&lt;h2 id="impacto-en-rendimiento"&gt;Impacto en rendimiento
&lt;/h2&gt;&lt;p&gt;Los scripts de terceros bloquean el renderizado, añaden requests, y ejecutan código no optimizado. Pueden añadir segundos al tiempo de carga.&lt;/p&gt;
&lt;h2 id="carga-diferida"&gt;Carga diferida
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;async&lt;/code&gt; o &lt;code&gt;defer&lt;/code&gt; para scripts no críticos. Carga bajo demanda (interacción del usuario). Posterga analytics con &lt;code&gt;requestIdleCallback&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="privacidad"&gt;Privacidad
&lt;/h2&gt;&lt;p&gt;Los scripts de terceros pueden rastrear usuarios. Consent Mode (GDPR). Alternativas: Cloudflare Zaraz, Plausible, Fathom (sin cookies).&lt;/p&gt;</description></item><item><title>Optimización del tamaño del bundle en aplicaciones web</title><link>https://takao.blog/es/web/bundle-size-optimization/</link><pubDate>Tue, 22 Oct 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/bundle-size-optimization/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/bundle-size-optimization-es.png" alt="Featured image of post Optimización del tamaño del bundle en aplicaciones web" /&gt;&lt;p&gt;Reducir el tamaño del bundle mejora los tiempos de carga y la experiencia del usuario. Las técnicas van desde análisis hasta code splitting y tree shaking.&lt;/p&gt;
&lt;h2 id="análisis-del-bundle"&gt;Análisis del bundle
&lt;/h2&gt;&lt;p&gt;Usa &lt;code&gt;vite-bundle-visualizer&lt;/code&gt; o &lt;code&gt;webpack-bundle-analyzer&lt;/code&gt; para identificar módulos grandes. Busca bibliotecas duplicadas, importaciones completas de lo que solo necesita partes, y dependencias sobredimensionadas.&lt;/p&gt;
&lt;h2 id="tree-shaking"&gt;Tree Shaking
&lt;/h2&gt;&lt;p&gt;Asegura imports específicos en lugar de namespace imports: &lt;code&gt;import { map } from 'lodash-es'&lt;/code&gt; en vez de &lt;code&gt;import _ from 'lodash'&lt;/code&gt;. Usa librerías tree-shakeable (ESM).&lt;/p&gt;</description></item><item><title>Optimización de imágenes en 2024: Formatos, carga y mejores prácticas</title><link>https://takao.blog/es/web/image-optimization-2024/</link><pubDate>Tue, 02 Jul 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/image-optimization-2024/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/image-optimization-2024-es.png" alt="Featured image of post Optimización de imágenes en 2024: Formatos, carga y mejores prácticas" /&gt;&lt;p&gt;Las imágenes son el recurso más pesado en la mayoría de sitios web. Optimizarlas mejora drásticamente LCP y la experiencia general.&lt;/p&gt;
&lt;h2 id="formatos-modernos"&gt;Formatos modernos
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;WebP&lt;/strong&gt;: soporte universal, compresión 30% mejor que JPEG. &lt;strong&gt;AVIF&lt;/strong&gt;: hasta 50% mejor que JPEG, pero mayor coste de codificación. &lt;strong&gt;JPEG XL&lt;/strong&gt;: prometedor pero soporte limitado.&lt;/p&gt;
&lt;h2 id="imágenes-responsive"&gt;Imágenes responsive
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;&amp;lt;picture&amp;gt;&lt;/code&gt; con &lt;code&gt;&amp;lt;source&amp;gt;&lt;/code&gt; para formatos múltiples. &lt;code&gt;srcset&lt;/code&gt; y &lt;code&gt;sizes&lt;/code&gt; para diferentes resoluciones. El navegador selecciona la imagen óptima según la pantalla.&lt;/p&gt;</description></item><item><title>Worker Threads en Node.js: Paralelismo real</title><link>https://takao.blog/es/web/nodejs-worker-threads/</link><pubDate>Tue, 23 Apr 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/nodejs-worker-threads/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/nodejs-worker-threads-es.png" alt="Featured image of post Worker Threads en Node.js: Paralelismo real" /&gt;&lt;p&gt;Worker Threads permite ejecutar JavaScript en múltiples hilos, descargando tareas CPU-intensive del event loop principal.&lt;/p&gt;
&lt;h2 id="cuándo-usar-workers"&gt;Cuándo usar workers
&lt;/h2&gt;&lt;p&gt;Cálculos matemáticos pesados, procesamiento de imágenes, parsing de archivos grandes, compresión, cifrado. No para operaciones I/O (ya son asíncronas).&lt;/p&gt;
&lt;h2 id="api-básica"&gt;API básica
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; { &lt;span style="color:#a6e22e"&gt;Worker&lt;/span&gt; } &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;require&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;worker_threads&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;worker&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Worker&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;./worker.js&amp;#39;&lt;/span&gt;, { &lt;span style="color:#a6e22e"&gt;workerData&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;data&lt;/span&gt; });
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;worker&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;on&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;message&amp;#39;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;result&lt;/span&gt; =&amp;gt; {});
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="comunicación"&gt;Comunicación
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;postMessage&lt;/code&gt;: copia estructurada (serializable). SharedArrayBuffer: memoria compartida. &lt;code&gt;parentPort.postMessage&lt;/code&gt; desde el worker. Atomics para sincronización.&lt;/p&gt;
&lt;h2 id="pool-de-workers"&gt;Pool de workers
&lt;/h2&gt;&lt;p&gt;Crear workers por tarea tiene overhead. Usa &lt;code&gt;workerpool&lt;/code&gt; o &lt;code&gt;piscina&lt;/code&gt; para pooling. Mantén un número fijo de workers (CPU cores - 1).&lt;/p&gt;</description></item><item><title>Optimización de imágenes con Next.js Image</title><link>https://takao.blog/es/web/nextjs-image-optimization/</link><pubDate>Tue, 26 Mar 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/nextjs-image-optimization/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/nextjs-image-optimization-es.png" alt="Featured image of post Optimización de imágenes con Next.js Image" /&gt;&lt;p&gt;Next.js Image component optimiza imágenes automáticamente: formatos modernos (WebP, AVIF), lazy loading, y dimensiones responsive.&lt;/p&gt;
&lt;h2 id="nextimage"&gt;next/image
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-jsx" data-lang="jsx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;import&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Image&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;from&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;next/image&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;Image&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;src&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;/hero.jpg&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;width&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;{&lt;span style="color:#ae81ff"&gt;1200&lt;/span&gt;} &lt;span style="color:#a6e22e"&gt;height&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;{&lt;span style="color:#ae81ff"&gt;600&lt;/span&gt;} &lt;span style="color:#a6e22e"&gt;alt&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Hero&amp;#34;&lt;/span&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Optimización en tiempo de build o bajo demanda (servidor de optimización).&lt;/p&gt;
&lt;h2 id="formatos-y-calidad"&gt;Formatos y calidad
&lt;/h2&gt;&lt;p&gt;Next.js sirve WebP o AVIF si el navegador lo soporta. &lt;code&gt;quality&lt;/code&gt; (1-100, default 75). &lt;code&gt;sizes&lt;/code&gt; para imágenes responsive. &lt;code&gt;priority&lt;/code&gt; para LCP.&lt;/p&gt;
&lt;h2 id="remote-patterns"&gt;Remote patterns
&lt;/h2&gt;&lt;p&gt;Configura &lt;code&gt;remotePatterns&lt;/code&gt; en next.config.js para permitir imágenes de dominios externos. Protege contra abusos del optimizador.&lt;/p&gt;</description></item><item><title>Core Web Vitals: Métricas esenciales de rendimiento web</title><link>https://takao.blog/es/web/core-web-vitals/</link><pubDate>Mon, 15 Jan 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/core-web-vitals/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/core-web-vitals-es.png" alt="Featured image of post Core Web Vitals: Métricas esenciales de rendimiento web" /&gt;&lt;p&gt;Core Web Vitals son tres métricas que Google usa para evaluar la experiencia de usuario. Impactan directamente en SEO y ranking de búsqueda.&lt;/p&gt;
&lt;h2 id="lcp-largest-contentful-paint"&gt;LCP (Largest Contentful Paint)
&lt;/h2&gt;&lt;p&gt;Mide el tiempo de renderizado del elemento visible más grande. Objetivo: menos de 2.5s. Estrategias: optimizar imágenes, precargar recursos críticos, minimizar bloqueo de renderizado.&lt;/p&gt;
&lt;h2 id="inp-interaction-to-next-paint"&gt;INP (Interaction to Next Paint)
&lt;/h2&gt;&lt;p&gt;Reemplaza FID como métrica de interactividad. Mide la latencia desde la interacción del usuario hasta el siguiente pintado. Objetivo: menos de 200ms.&lt;/p&gt;</description></item></channel></rss>