<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: masiaf</title>
    <description>The latest articles on DEV Community by masiaf (@masiafrest).</description>
    <link>https://dev.to/masiafrest</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F949214%2F2936c161-cdf2-41db-8999-61305374a44e.png</url>
      <title>DEV Community: masiaf</title>
      <link>https://dev.to/masiafrest</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/masiafrest"/>
    <language>en</language>
    <item>
      <title>Next.js en el desarrollo: ¿Un cuello de botella?</title>
      <dc:creator>masiaf</dc:creator>
      <pubDate>Wed, 02 Jul 2025 21:35:55 +0000</pubDate>
      <link>https://dev.to/masiafrest/nextjs-en-el-desarrollo-un-cuello-de-botella-5hk4</link>
      <guid>https://dev.to/masiafrest/nextjs-en-el-desarrollo-un-cuello-de-botella-5hk4</guid>
      <description>&lt;p&gt;He trabajado con React por más de cinco años, y después adopté Next.js, que se ha convertido en mi &lt;strong&gt;framework principal&lt;/strong&gt; tanto en proyectos laborales como en esos pequeños "weekend throwaway projects".&lt;/p&gt;

&lt;p&gt;Sin embargo, me he topado con un problema recurrente: la &lt;strong&gt;lentitud en la compilación&lt;/strong&gt; de páginas y rutas durante el desarrollo, especialmente en proyectos grandes. En ocasiones, los tiempos de compilación superaban los &lt;strong&gt;10 segundos&lt;/strong&gt; (¡sí, leíste bien, más de 10 segundos!). Si a esto le sumaba Sentry, el tiempo podía duplicarse. Al principio, pensé que era una "skill issue" o que mi máquina (una MacBook M1) ya no daba la talla.&lt;/p&gt;

&lt;p&gt;Para descartar esto, reviví mi vieja PC de escritorio con Pop!_OS. Aunque ya tiene sus años, cuenta con un Ryzen 7 y una GPU 1060. Creí que el desarrollo en Next.js sería más fluido, y sí, los tiempos de compilación mejoraron a entre &lt;strong&gt;3 y 5 segundos&lt;/strong&gt;. No obstante, seguía sin ser lo ideal, sobre todo si lo comparo con la &lt;strong&gt;experiencia casi instantánea&lt;/strong&gt; que ofrece Vite con React en cada cambio que hago. En Next.js, la espera por la compilación continuaba siendo una constante.&lt;/p&gt;

&lt;p&gt;Investigando un poco, me di cuenta de que no era el único con este problema. Encontré discusiones similares en Reddit y GitHub:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/nextjs/comments/1b3qlwt/dev_is_painfully_slow/" rel="noopener noreferrer"&gt;Dev is painfully slow - Reddit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vercel/next.js/discussions/17977#discussioncomment-6111870" rel="noopener noreferrer"&gt;Super slow page load times in development environment - GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esto era, en cierto modo, de esperarse. Next.js compila tanto en el servidor como en el cliente, incluso por el más mínimo cambio de línea. Si bien los tiempos de carga de la página una vez compilada y generada estáticamente pueden ser menores a 200ms, el verdadero &lt;strong&gt;dolor de cabeza es cada vez que inicias el desarrollo&lt;/strong&gt;, pues el proceso de compilación debe ejecutarse de nuevo (aclaro, esto sucede en modo desarrollo).&lt;/p&gt;




&lt;h3&gt;
  
  
  ¿Qué hice para mejorar los tiempos de compilación en desarrollo?
&lt;/h3&gt;

&lt;p&gt;Para intentar reducir estos tiempos y mejorar mi &lt;strong&gt;"Developer Experience" (DX)&lt;/strong&gt;, implementé algunas optimizaciones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Desactivar &lt;a href="https://nextjs.org/docs/app/guides/prefetching" rel="noopener noreferrer"&gt;&lt;code&gt;prefetch&lt;/code&gt; en el componente &lt;code&gt;Link&lt;/code&gt;&lt;/a&gt; de Next.js&lt;/strong&gt;: Por defecto, esta propiedad intenta precargar recursos de manera anticipada. Desactivarla puede reducir la carga en el proceso de compilación.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limitar Sentry o cualquier herramienta de observabilidad a producción&lt;/strong&gt;: Estas herramientas son cruciales, pero su impacto en el rendimiento de la compilación en desarrollo puede ser significativo. Es mejor activarlas solo cuando sea estrictamente necesario.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Activar Turbopack&lt;/strong&gt;: Este bundler, desarrollado por Vercel, está diseñado para ser mucho más rápido que Webpack y puede mejorar drásticamente los tiempos de compilación en Next.js, puedes consultar si esta listo para prod o dev &lt;a href="https://areweturboyet.com/" rel="noopener noreferrer"&gt;areweturboyet&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Puedes encontrar más detalles sobre estas optimizaciones en &lt;a href="https://nextjs.org/docs/app/guides/local-development" rel="noopener noreferrer"&gt;la Guía de desarrollo local de Next.js.&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  ¿Es Next.js la opción correcta para todos los proyectos?
&lt;/h3&gt;

&lt;p&gt;Al final, si tu aplicación es &lt;strong&gt;"heavy"&lt;/strong&gt; y no dependes en gran medida del &lt;strong&gt;SEO&lt;/strong&gt; (o tienes un servidor separado), me inclinaría por &lt;strong&gt;Vite&lt;/strong&gt;. La velocidad de desarrollo que ofrece es incomparable.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>desarollo</category>
      <category>lag</category>
      <category>react</category>
    </item>
    <item>
      <title>Operadores lógico vs ternario en react</title>
      <dc:creator>masiaf</dc:creator>
      <pubDate>Fri, 25 Nov 2022 14:53:44 +0000</pubDate>
      <link>https://dev.to/masiafrest/0-en-react-ui-1mio</link>
      <guid>https://dev.to/masiafrest/0-en-react-ui-1mio</guid>
      <description>&lt;p&gt;El titulo tal vez sea vago, pero basicamente estas en una vista, usando un &lt;code&gt;falsy/truthy&lt;/code&gt; con &lt;a href="https://reactjs.org/docs/conditional-rendering.html" rel="noopener noreferrer"&gt;renderizado condicional&lt;/a&gt; &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; y ves un 0 colado.&lt;br&gt;
ejemplo: &lt;code&gt;{count &amp;amp;&amp;amp; &amp;lt;div&amp;gt;Más de cero&amp;lt;/div&amp;gt;}&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzcdd817xyxc6wwejr8p5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzcdd817xyxc6wwejr8p5.png" alt="Image description" width="800" height="724"&gt;&lt;/a&gt;&lt;br&gt;
Depende del contexto queras que aparezca el 0, ejemplo: un carrito de articulos, pero la mayoria es solo para mostrar o no mostrar x o y componente.&lt;/p&gt;

&lt;p&gt;Habra gente que diria q usar &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#logical_operators" rel="noopener noreferrer"&gt;operadores logico&lt;/a&gt; es mala practica, y que deberia usar un &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator" rel="noopener noreferrer"&gt;ternario&lt;/a&gt;, usando el anterior codigo de ejemplo: &lt;code&gt;{count ? &amp;lt;div&amp;gt;Más de cero&amp;lt;/div&amp;gt; : null}&lt;/code&gt; esto funciona, pero si lo ves muy verboso escribir, agregar null y a veces peor si vas a insertar otro ternario dentro de otro ternario, haciendo que sea mucho mas dificil de leer y en algunos casos aumentar la carga cognitiva.&lt;/p&gt;

&lt;p&gt;¿Cual usarias un operador logico o ternario? Siguiendo la regla del &lt;code&gt;yingyang ☯️&lt;/code&gt; ambas dependiendo del caso, si vas a usar un falsy/truty en un operador logico para mostrar un elemento en react mayoria de los casos castearlo a un boolean ( da igual el metodo doble bang &lt;code&gt;!!&lt;/code&gt; o el metodo &lt;code&gt;Boolean()&lt;/code&gt; ) asi te aseguras q si el falsy es un number 0 no se mostrara en pantalla y si quieres mas explicito o no quieres castearlo usa un ternario como el ejemplo anterior donde falsy retorna null.&lt;/p&gt;

</description>
      <category>react</category>
      <category>falsy</category>
      <category>debug</category>
      <category>zero</category>
    </item>
    <item>
      <title>Inferir Tipado de Objetos</title>
      <dc:creator>masiaf</dc:creator>
      <pubDate>Wed, 19 Oct 2022 18:08:03 +0000</pubDate>
      <link>https://dev.to/masiafrest/inferir-tipado-de-objetos-2af5</link>
      <guid>https://dev.to/masiafrest/inferir-tipado-de-objetos-2af5</guid>
      <description>&lt;p&gt;No le han pasado que han declarado un objecto y luego ir agregando mas campo con el pasar del tiempo (ya sea por nuevo requerimientos, no era necesarios al comienzo o no sabian que iban a ser necesarios) y asi mismo ir actualizando tambien el tipado o dejar que Ts infiera, pero si necesitan la key del objecto? o el value?.&lt;/p&gt;

&lt;p&gt;En mi dia a dia uso Ts y bastante objecto una de las ventajas que me gusta es el autocompletado/sugerencias en el editor de codigo que te da el tipado, si no te sale una opcion de elegir o no esperabas en el autocompletado/sugerencias sabes que no existe en ese objecto (al menos que la lib q usas por alguna razón no la incluyo en su propio tipado).&lt;/p&gt;

&lt;p&gt;Una de las tecnicas que uso de Ts es typeof, keyof, combinacion de ambas aveces, veremos unos ejemplos de como se usa cada uno.&lt;/p&gt;

&lt;h2&gt;
  
  
  typeof, keyof
&lt;/h2&gt;

&lt;p&gt;En el caso de los objectos una de las formas mas basica que hacemos es crear el tipado y luego tiparlo a la variable que vamos a crear.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxhoro5u7f4261h9zxco5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxhoro5u7f4261h9zxco5.png" alt="create Types and var" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;este es otra alternativa que uso de vez en cuando, ya que el objecto es dinamico.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsf9lxhadqgqudij6uedx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsf9lxhadqgqudij6uedx.png" alt="use typeof" width="652" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;normalmente lo uso mucho en react cuando declaramos un estado inicial&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5o0q9gwsmxw0zr3zdx3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5o0q9gwsmxw0zr3zdx3.png" alt="initial state use case" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cool con el autocompletado verdad!! 😎.&lt;br&gt;
ahora si tenemos una funcion que lo que hace es devolvernos el valor dependiendo de la llave que la pasamos, podriamos crear la funcion asi&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffxk0nkxyee8q5u81atxw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffxk0nkxyee8q5u81atxw.png" alt="fn that return the obj value by key" width="758" height="132"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No hay ningun problema crearlo asi, pero si queremos el autocompletado/sugerencias que nos diga que puede recibir como argumento a la hora de llamar la funcion no la tendriamos 😢 (aunque podriamos mentalmente saber que key pasar y recibir el valor, pero eso es cognitivamente estresante 🫠, para eso esta la tecnologia de nuestro lado!).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftk9xxurrwdmlz36n6ktb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftk9xxurrwdmlz36n6ktb.png" alt="no autocomplete" width="730" height="740"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;para tener el autocompletado/sugerencias y evitar pasar campos que no exista (una forma de protegernos y ahorrar tiempo y ver los errores en el editor, todo eso antes del runtime!!🫠) podemos usar la combinacion de typeof y keyof&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd37m9fsxdmj9xtztzv4r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd37m9fsxdmj9xtztzv4r.png" alt="with autocomplete" width="800" height="649"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yayyyy!!! 🙌 tenemos autocompletado/sugerencias de nuevo!&lt;/p&gt;

&lt;p&gt;Espero que esto le ayude en su dia a dia como desarrollador en Typescript y disculpa por la imagenes y calidad de redacció 👀.&lt;/p&gt;

&lt;p&gt;aqui las documentacion: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.typescriptlang.org/docs/handbook/2/typeof-types.html" rel="noopener noreferrer"&gt;typeof&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.typescriptlang.org/docs/handbook/2/keyof-types.html" rel="noopener noreferrer"&gt;keyof&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>typescript</category>
    </item>
  </channel>
</rss>
