<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Nodejs on Commentary of Takao</title><link>https://takao.blog/es/tags/nodejs/</link><description>Recent content in Nodejs 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/nodejs/index.xml" rel="self" type="application/rss+xml"/><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>Logging en Node.js: Prácticas y herramientas</title><link>https://takao.blog/es/web/nodejs-logging/</link><pubDate>Tue, 06 Aug 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/nodejs-logging/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/nodejs-logging-es.png" alt="Featured image of post Logging en Node.js: Prácticas y herramientas" /&gt;&lt;p&gt;El logging es esencial para depuración, monitoreo y análisis. Node.js ofrece &lt;code&gt;console.log&lt;/code&gt; pero las aplicaciones en producción necesitan más.&lt;/p&gt;
&lt;h2 id="niveles-de-log"&gt;Niveles de log
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;error&lt;/code&gt;, &lt;code&gt;warn&lt;/code&gt;, &lt;code&gt;info&lt;/code&gt;, &lt;code&gt;debug&lt;/code&gt;, &lt;code&gt;trace&lt;/code&gt;. Configura el nivel mínimo: en producción solo &lt;code&gt;info&lt;/code&gt; y superiores, en desarrollo también &lt;code&gt;debug&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="bibliotecas-populares"&gt;Bibliotecas populares
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Pino&lt;/strong&gt;: rápido, JSON nativo, niveles, child loggers. &lt;strong&gt;Winston&lt;/strong&gt;: flexible, transports múltiples (archivo, consola, remoto). &lt;strong&gt;Bunyan&lt;/strong&gt;: JSON con soporte de streams.&lt;/p&gt;
&lt;h2 id="formato-json"&gt;Formato JSON
&lt;/h2&gt;&lt;p&gt;Los logs en JSON son parseables por herramientas de análisis (ELK, Datadog, Grafana). Incluye timestamp, nivel, mensaje, contexto y correlation ID.&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>Streams en Node.js: Procesamiento eficiente de datos</title><link>https://takao.blog/es/web/nodejs-streams/</link><pubDate>Wed, 20 Dec 2023 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/nodejs-streams/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/nodejs-streams-es.png" alt="Featured image of post Streams en Node.js: Procesamiento eficiente de datos" /&gt;&lt;p&gt;Los streams de Node.js permiten procesar datos en fragmentos (chunks) sin cargar todo en memoria. Esencial para archivos grandes y redes.&lt;/p&gt;
&lt;h2 id="tipos-de-streams"&gt;Tipos de streams
&lt;/h2&gt;&lt;p&gt;Readable: fuente de datos. Writable: destino de datos. Transform: transforma datos (compress, encrypt). Duplex: ambos (net socket).&lt;/p&gt;
&lt;h2 id="pipe-y-pipeline"&gt;Pipe y pipeline
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;readable.pipe(writable)&lt;/code&gt; encadena streams. &lt;code&gt;pipeline&lt;/code&gt; (recomendada) maneja errores y limpia correctamente: &lt;code&gt;pipeline(readable, transform, writable, callback)&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="backpressure"&gt;Backpressure
&lt;/h2&gt;&lt;p&gt;Cuando el writable es más lento que el readable, se aplica backpressure. &lt;code&gt;highWaterMark&lt;/code&gt; controla el buffer interno. El stream pause automáticamente.&lt;/p&gt;</description></item></channel></rss>