<?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: Muhammad Obaid Ullah Khan</title>
    <description>The latest articles on DEV Community by Muhammad Obaid Ullah Khan (@oba1dkhan).</description>
    <link>https://dev.to/oba1dkhan</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%2F939672%2F5586d8fe-1654-4428-8e61-60aea2129594.jpg</url>
      <title>DEV Community: Muhammad Obaid Ullah Khan</title>
      <link>https://dev.to/oba1dkhan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oba1dkhan"/>
    <language>en</language>
    <item>
      <title>What Happens When You Break the Rules of Hooks in React?</title>
      <dc:creator>Muhammad Obaid Ullah Khan</dc:creator>
      <pubDate>Thu, 10 Apr 2025 13:18:46 +0000</pubDate>
      <link>https://dev.to/oba1dkhan/what-happens-when-you-break-the-rules-of-hooks-in-react-4ell</link>
      <guid>https://dev.to/oba1dkhan/what-happens-when-you-break-the-rules-of-hooks-in-react-4ell</guid>
      <description>&lt;p&gt;React has a strict rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't call hooks inside loops, conditions, or nested functions.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This isn’t just a style preference, it’s required for React to work correctly.&lt;/p&gt;

&lt;p&gt;If you break this rule, you’ll run into bugs that are hard to trace. Here's exactly why this rule exists and what React is doing under the hood that makes it necessary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here's what’s actually going on:&lt;/strong&gt;&lt;br&gt;
React doesn’t track your hooks by name instead it tracks them by order of execution.&lt;/p&gt;

&lt;p&gt;So when your component renders, React expects something like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;1st hook → useState  &lt;br&gt;
2nd hook → useEffect  &lt;br&gt;
3rd hook → useRef&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This order must stay the same every render.&lt;br&gt;
If it doesn't? React pulls the wrong state out of the wrong slot, and now your useRef is getting count’s value and chaos begins 🧨&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;## Here's the kind of code that breaks things:&lt;/strong&gt;&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%2Fnzh8ryw9ocqbb2evtskn.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%2Fnzh8ryw9ocqbb2evtskn.png" alt="Image description" width="710" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On one render, useState is there.&lt;br&gt;
On the next? It's skipped.&lt;br&gt;
Bug time! 🐞&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ The fix? Simple rule:
&lt;/h2&gt;

&lt;p&gt;Call all your hooks at the top level, and in the same order on every render.&lt;/p&gt;

&lt;p&gt;No if, no for, no function inside a function.&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%2Fp3elf7av2m2m9mgwlse2.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%2Fp3elf7av2m2m9mgwlse2.png" alt="Image description" width="715" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎯 The takeaway:&lt;br&gt;
React’s rules around hooks might seem strict, but they exist for a reason: to ensure your state and side effects are predictable and consistent. By following these simple guidelines, you can avoid tricky bugs and keep your app running smoothly.&lt;/p&gt;

&lt;p&gt;If you’ve ever run into strange issues with hooks, this might be the explanation you’ve been looking for. Stay consistent, keep your hooks at the top level, and React will handle the rest.&lt;/p&gt;

&lt;p&gt;Got a hook-related bug story of your own? Drop it in the comments, or let me know if this helped clear things up! 👇&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How Next.js Image Component Solves Layout Shift Issues 🚀</title>
      <dc:creator>Muhammad Obaid Ullah Khan</dc:creator>
      <pubDate>Mon, 04 Nov 2024 18:14:33 +0000</pubDate>
      <link>https://dev.to/oba1dkhan/how-nextjs-image-component-solves-layout-shift-issues-2117</link>
      <guid>https://dev.to/oba1dkhan/how-nextjs-image-component-solves-layout-shift-issues-2117</guid>
      <description>&lt;p&gt;Have you ever been reading something, and suddenly the content jumps because an image finished loading? This common issue, called &lt;strong&gt;Cumulative Layout Shift (CLS)&lt;/strong&gt;, impacts user experience and SEO. Luckily, &lt;strong&gt;Next.js&lt;/strong&gt; offers a smart solution with its &lt;strong&gt;Image&lt;/strong&gt; component.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Cumulative Layout Shift (CLS)? 🤔
&lt;/h2&gt;

&lt;p&gt;CLS is a Core Web Vital metric that measures how much unexpected layout shift happens as a page loads. A good CLS score is essential because it means:&lt;/p&gt;

&lt;p&gt;✅ Better User Experience&lt;br&gt;
  ✅ Higher SEO Rankings&lt;br&gt;
  ✅ A More Professional-Looking Website&lt;/p&gt;
&lt;h2&gt;
  
  
  The Issue with Standard &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; Tags
&lt;/h2&gt;

&lt;p&gt;Using traditional HTML &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tags can lead to layout shifts because the browser doesn’t know the image dimensions until it loads. Here’s what typically happens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Page text loads.&lt;/li&gt;
&lt;li&gt;Image starts downloading.&lt;/li&gt;
&lt;li&gt;Once loaded, the image pushes content down, causing an annoying “jump.”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's see the problem in action:&lt;br&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%2Fwrjc03xxlbq4qudncdpu.gif" 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%2Fwrjc03xxlbq4qudncdpu.gif" alt="Layout shift demonstration showing the difference between regular img tags and Next.js Image component" width="800" height="450"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;👆 Watch how content jumps with traditional images (left) vs. stable loading with Next.js Image component (right).&lt;/p&gt;
&lt;h2&gt;
  
  
  Next.js Image Component to the Rescue 🦸‍♂️
&lt;/h2&gt;

&lt;p&gt;With Next.js’s &lt;strong&gt;Image&lt;/strong&gt; component, you can prevent layout shifts by specifying dimensions up front, giving the browser space to load the image without affecting the layout.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ✅ Good Practice&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Image&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next/image&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;ProductCard&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt;
      &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/product.jpg"&lt;/span&gt;
      &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Product description"&lt;/span&gt;
      &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;640&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;480&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="na"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lazy"&lt;/span&gt;
    &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🗝️ Key Features That Prevent Layout Shift
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Reserved Space for Smooth Loading
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Required Dimensions&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
With the Image component, &lt;code&gt;width&lt;/code&gt; and &lt;code&gt;height&lt;/code&gt; properties are mandatory. This reserves space for the image even before it loads, preventing layout shifts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Responsive Sizing&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The component automatically adapts to the screen size while maintaining the image’s aspect ratio. This prevents layout shifts across different device sizes.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Automatic Placeholder
&lt;/h3&gt;

&lt;p&gt;The Image component can use a blur placeholder, reserving the exact space needed. This allows the layout to stay stable while the image loads, making the experience smoother.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices for Using the Image Component
&lt;/h2&gt;

&lt;p&gt;Following these practices will help you get the most out of the Next.js Image component.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Always Set Dimensions&lt;/strong&gt;
Defining dimensions helps the browser know the exact space the image will take up, avoiding layout shifts.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="c1"&gt;// Good&lt;/span&gt;
   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/hero.jpg"&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Hero image"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;

   &lt;span class="c1"&gt;// Bad (missing dimensions)&lt;/span&gt;
   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/hero.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Hero image"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use Blur Placeholder for Important Images&lt;/strong&gt;
Adding a blur placeholder for above-the-fold images gives a smooth loading effect.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/hero.jpg"&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Hero image"&lt;/span&gt; &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"blur"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set Priority for Critical Images&lt;/strong&gt;
For hero images or other important visuals, set the &lt;code&gt;priority&lt;/code&gt; property to &lt;code&gt;true&lt;/code&gt; for faster loading.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/hero.jpg"&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Hero image"&lt;/span&gt; &lt;span class="na"&gt;priority&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Check Your CLS Improvements 📊
&lt;/h2&gt;

&lt;p&gt;Use these tools to measure your CLS improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chrome DevTools&lt;/strong&gt; (Performance tab)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lighthouse Audits&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Core Web Vitals&lt;/strong&gt; in Google Search Console&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Avoid Common Mistakes ⚠️
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Don’t Skip Alt Text&lt;/strong&gt;
Alt text is essential for accessibility, making your images accessible to screen readers.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="c1"&gt;// Bad&lt;/span&gt;
   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/product.jpg"&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;

   &lt;span class="c1"&gt;// Good&lt;/span&gt;
   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/product.jpg"&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Red ceramic coffee mug with floral pattern"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Handle External Image URLs Carefully&lt;/strong&gt;
If you’re using images from an external source, configure domains in &lt;code&gt;next.config.js&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;images&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="na"&gt;domains&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
     &lt;span class="p"&gt;},&lt;/span&gt;
   &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;By using the Next.js Image component and following these best practices, you’ll ensure smooth loading, a stable layout, and a more professional website experience.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📏 Specify dimensions&lt;/li&gt;
&lt;li&gt;🔄 Use blur placeholders and lazy loading&lt;/li&gt;
&lt;li&gt;📈 Monitor your CLS scores&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enjoy coding with Next.js, and let your images load proficiently! 🎉&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
