<?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: Timi</title>
    <description>The latest articles on DEV Community by Timi (@timhilehin1).</description>
    <link>https://dev.to/timhilehin1</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%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg</url>
      <title>DEV Community: Timi</title>
      <link>https://dev.to/timhilehin1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/timhilehin1"/>
    <language>en</language>
    <item>
      <title>It's a good day to learn more about CDNs</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Mon, 23 Mar 2026 10:24:47 +0000</pubDate>
      <link>https://dev.to/timhilehin1/its-a-good-day-to-learn-more-about-cdns-2n3p</link>
      <guid>https://dev.to/timhilehin1/its-a-good-day-to-learn-more-about-cdns-2n3p</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/timhilehin1/understanding-cdns-content-delivery-networks-138d" class="crayons-story__hidden-navigation-link"&gt;Understanding CDNs (Content Delivery Networks)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/timhilehin1" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg" alt="timhilehin1 profile" class="crayons-avatar__image" width="800" height="1000"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/timhilehin1" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Timi
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Timi
                
              
              &lt;div id="story-author-preview-content-3331833" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/timhilehin1" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg" class="crayons-avatar__image" alt="" width="800" height="1000"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Timi&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/timhilehin1/understanding-cdns-content-delivery-networks-138d" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 17&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/timhilehin1/understanding-cdns-content-delivery-networks-138d" id="article-link-3331833"&gt;
          Understanding CDNs (Content Delivery Networks)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/performance"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;performance&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cdn"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cdn&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/frontend"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;frontend&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/timhilehin1/understanding-cdns-content-delivery-networks-138d" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;9&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/timhilehin1/understanding-cdns-content-delivery-networks-138d#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              10&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>performance</category>
      <category>webdev</category>
      <category>cdn</category>
      <category>frontend</category>
    </item>
    <item>
      <title>How CDNs have improved how we get data from the internet</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Thu, 19 Mar 2026 08:09:38 +0000</pubDate>
      <link>https://dev.to/timhilehin1/how-cdns-have-improved-how-we-get-data-from-the-internet-15cm</link>
      <guid>https://dev.to/timhilehin1/how-cdns-have-improved-how-we-get-data-from-the-internet-15cm</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/timhilehin1" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg" alt="timhilehin1"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/timhilehin1/understanding-cdns-content-delivery-networks-138d" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Understanding CDNs (Content Delivery Networks)&lt;/h2&gt;
      &lt;h3&gt;Timi ・ Mar 17&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#performance&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#cdn&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#frontend&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>performance</category>
      <category>webdev</category>
      <category>cdn</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Understanding CDNs</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Tue, 17 Mar 2026 07:54:04 +0000</pubDate>
      <link>https://dev.to/timhilehin1/understanding-cdns-41ld</link>
      <guid>https://dev.to/timhilehin1/understanding-cdns-41ld</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/timhilehin1" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg" alt="timhilehin1"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/timhilehin1/understanding-cdns-content-delivery-networks-138d" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Understanding CDNs (Content Delivery Networks)&lt;/h2&gt;
      &lt;h3&gt;Timi ・ Mar 17&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Understanding CDNs (Content Delivery Networks)</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Tue, 17 Mar 2026 07:53:40 +0000</pubDate>
      <link>https://dev.to/timhilehin1/understanding-cdns-content-delivery-networks-138d</link>
      <guid>https://dev.to/timhilehin1/understanding-cdns-content-delivery-networks-138d</guid>
      <description>&lt;p&gt;I said I'd be writing about concepts I've frequently come across but never really stopped to properly understand. Today it's CDNs(Content Delivery Networks)&lt;/p&gt;

&lt;p&gt;This one is interesting because it's not just something I've seen in everyday SPAs. I keep running it across tools and services I actually work with, and at some point I had to sit down and figure out what exactly is going on here.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what is even a CDN?
&lt;/h2&gt;

&lt;p&gt;At a high level, it's a system that makes sure your content gets to users faster, no matter where in the world they're requesting from.&lt;/p&gt;

&lt;p&gt;Here's the version I had in my head before digging in:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It has something to do with caching. Data is being served from the edge of a network. Some technologies take advantage of CDNs to deliver their content faster&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's... not wrong. But it was pretty vague. Let me break it down properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem CDNs Solve
&lt;/h2&gt;

&lt;p&gt;Let's say you deploy a web app and your server is sitting somewhere in the United States, Frankfurt, or wherever Vercel spins things up.&lt;/p&gt;

&lt;p&gt;Now a user in Lagos, Nigeria opens your app.&lt;/p&gt;

&lt;p&gt;Without a CDN, their request has to travel all the way from Lagos, across the Atlantic, to that server in the US, back across the Atlantic, back to Lagos. Every single time.&lt;/p&gt;

&lt;p&gt;That round trip adds latency. And Latency is just the time it takes for data to travel from point A to point B and back again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WITHOUT CDN&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%2F35jchdgymo61p274ni70.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%2F35jchdgymo61p274ni70.png" alt="Without CDN diagram" width="613" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now here's the part that really made me wonder, If it's all over the internet, why does distance matter?&lt;/p&gt;

&lt;p&gt;It matters because the Internet is not magic. It runs on physical infrastructure: fiber optic cables, routers, submarine cables under the ocean, data centers. And even though signals travel as the speed of light through those cables, light still takes time to cross an ocean. Add in routers, the hops between networks, the processing at each stop and it all adds up.&lt;/p&gt;

&lt;p&gt;Milliseconds, yes. But milliseconds matter when you're trying to build software that feels fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  How a CDN fixes this
&lt;/h2&gt;

&lt;p&gt;CDN providers have servers distributed all over the world, what are called edge servers. Instead of every request going back to your main server(the origin server),users get served from the closest edge server to them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WITH CDN&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%2Fg2nu0cuzqam0leoriyoc.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%2Fg2nu0cuzqam0leoriyoc.png" alt="CDN Implementation" width="654" height="166"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's how it actually plays out. A user in Lagos, Nigeria requests your website. Instead of that request flying across the Atlantic, it hits an edge server somewhere nearby, If the provider has a presence in Lagos, It could be served right there. If not, the next closest option maybe somewhere else in West Africa. The point is it stays regional, not transatlantic.&lt;/p&gt;

&lt;p&gt;If it's a &lt;strong&gt;cache hit&lt;/strong&gt;, the content is already sitting on that edge server. It returns immediately. The origin server in the US doesn't even know the request happened.&lt;/p&gt;

&lt;p&gt;If it's a &lt;strong&gt;cache miss&lt;/strong&gt;, the edge server doesn't have it yet. It goes back to the origin, fetches the content, returns it to the user, and stores a copy so the next person requesting from that region gets it instantly.&lt;/p&gt;

&lt;p&gt;That's the loop. Origin server holds the actual content. Edge servers hold cached copies and serve them to whoever is closest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Worth noting here&lt;/strong&gt;: What gets cached on edge servers is generic content, your HTML pages, images, JS bundles, stuff that looks the same for every user, User- Specific data like dashboards, auth states, or anything behind a login doesn't go through this path. That's a distinction CDNs and the developers configuring them are very deliberate about.&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%2F9krczo3hp2hmpjdzq3dk.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%2F9krczo3hp2hmpjdzq3dk.png" alt="Image showing how requests move from origin servers to edge servers" width="652" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each edge location serves the users closest to it. The origin only gets hit when and edge server needs to refresh its cache or sees content for the first time.&lt;/p&gt;

&lt;h2&gt;
  
  
  How this shows up in the tools we actually use
&lt;/h2&gt;

&lt;p&gt;This is where it got relatable for me. CDNs aren't just a infrastructure concept. They are baked into services I use daily as a developer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloudfare&lt;/strong&gt; is probably the most obvious one. A huge part of what Cloudfare does is sit in front of your origin server and intercept requests. They have edge servers in cities all over the world, Lagos Included. When someone requests your site. Cloudfare serves cached content from the nearest location. Your origin doesn't really have to bother returning it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sanity&lt;/strong&gt; is one I also noticed more recently. Sanity's main servers aren't in Nigeria, but when someone here requests content from sanity. It doesn't travel across the world. It comes from Sanity's CDN edge server, which is much closer. although sanity even does something interesting by exposing a flag know as &lt;code&gt;useCDN:true/false&lt;/code&gt;, As an engineer I can either opt to fetch content straight from the origin or edge, Cool right?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vercel and Netlify(popular host providers)&lt;/strong&gt; have this built in too. When you deploy a static site or use edge functions, you're not really deploying to one server. You're deploying to their edge network. That's partly why deploys feels like magic; your content is already near you before the first request even lands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As a developer, what does this actually mean for you?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now that I have a better mental model of how this works, a few things I've run into as an engineer started clicking:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cache invalidation&lt;/strong&gt; is a real thing. When I update content, edge servers might still be serving the old cached version. Some platforms handle this automatically on deploy, others require explicitly purging the cache. I've pushed updates using a Content management system  and wondered why users were still seeing the old version. Turns out the edge servers just hadn't caught up yet.&lt;/p&gt;

&lt;p&gt;Another thing worth understanding is &lt;strong&gt;Cache-Control headers&lt;/strong&gt;. The server can include instructions on how long content should be cached when it sends a response. For content that changes often, short cache times or none at all. For static assets like images, fonts, and JS bundles, cache aggressively. Getting this right means the CDN works with the app, not against it.&lt;/p&gt;

&lt;p&gt;And not everything should be cached, this one is easy to miss. User-specific data, auth responses, anything that varies per person. None of that should be sitting on and edge server. CDNs shine brightest with static assets and content that looks the same regardless of who is asking for it. &lt;/p&gt;

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

&lt;p&gt;CDNs exist because the internet, while fast, is still physical and distance adds latency. Instead of every user talking to one origin server far away, CDNs distribute copies of your content across edge servers worldwide so users get it from somewhere close to them.&lt;/p&gt;

&lt;p&gt;You're almost certainly using a CDN if you're deploying on modern infrastructure. But understanding how it works helps you make smarter decisions about caching, about content structure, about why your users in one region are having a different experience than users somewhere else.&lt;/p&gt;

&lt;p&gt;Let me know if you add have anything to add in the comments or any push back, would love to discuss it. And when I find something else I use every day but never really understood, I'll be back. Soon. Very soon. Byeeeeee&lt;/p&gt;

</description>
      <category>performance</category>
      <category>webdev</category>
      <category>cdn</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Nice read</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Mon, 09 Mar 2026 17:29:50 +0000</pubDate>
      <link>https://dev.to/timhilehin1/nice-read-517m</link>
      <guid>https://dev.to/timhilehin1/nice-read-517m</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/texavor" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&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%2Forganization%2Fprofile_image%2F9390%2Ffecc06a4-1b0b-4692-bd92-1e8ed17736f5.png" alt="Texavor" width="800" height="800"&gt;
      &lt;div class="ltag__link__user__pic"&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%2Fuser%2Fprofile_image%2F417922%2Fd5a37d43-1157-4c3a-b4dd-8b5a111371ca.png" alt="" width="800" height="800"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/texavor/how-to-optimize-seo-with-nextjs-in-2026-1bhl" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How to Optimize SEO with Next.js in 2026&lt;/h2&gt;
      &lt;h3&gt;Suraj Vishwakarma for Texavor ・ Mar 5&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#react&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>beginners</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Mon, 02 Mar 2026 12:13:54 +0000</pubDate>
      <link>https://dev.to/timhilehin1/-396m</link>
      <guid>https://dev.to/timhilehin1/-396m</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/timhilehin1" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F1291324%2F3954be9d-2c74-4160-9525-10bdd9a61a09.jpeg" alt="timhilehin1"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/timhilehin1/client-side-rendering-vs-server-side-rendering-1pje" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Client Side Rendering vs Server Side Rendering&lt;/h2&gt;
      &lt;h3&gt;Timi ・ Mar 2&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#react&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#nextjs&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#learning&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>react</category>
      <category>nextjs</category>
      <category>webdev</category>
      <category>learning</category>
    </item>
    <item>
      <title>Client Side Rendering vs Server Side Rendering</title>
      <dc:creator>Timi</dc:creator>
      <pubDate>Mon, 02 Mar 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/timhilehin1/client-side-rendering-vs-server-side-rendering-1pje</link>
      <guid>https://dev.to/timhilehin1/client-side-rendering-vs-server-side-rendering-1pje</guid>
      <description>&lt;p&gt;Lately I've decided to keep mental notes of everyday concepts I use in my work. Most times I have a good overview of what a concept does but I never really understood what goes on under the hood. I mean, it works innit. But I'm taking a step further with some of those concepts, and today's subject is all about Client Side Rendering(CSR) and Server Side Rendering(SSR).&lt;/p&gt;

&lt;h2&gt;
  
  
  Before SSR was a thing
&lt;/h2&gt;

&lt;p&gt;We all know how wonderful Single Page Applications(SPAs) are, but to really appreciate SSR, we need to go back a little.&lt;/p&gt;

&lt;p&gt;So basically, the traditional way of displaying content on the internet is this little relationship that happens between the client, which is your browser and the server, whatever web hosting platform your content lives on.&lt;/p&gt;

&lt;p&gt;The browser asks the server for a page, the server returns an &lt;code&gt;index.html&lt;/code&gt; with a &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag at the bottom pointing to a &lt;code&gt;main.js&lt;/code&gt; file, the browser then makes another request to fetch that &lt;code&gt;main.js&lt;/code&gt; and executes it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- index.html --&amp;gt;
&amp;lt;div id="root"&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;script src="/main.js"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you look closely at that main.js, you will find something like this&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ReactDOM.createRoot(document.getElementById("root")).render(&amp;lt;App /&amp;gt;);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This is where React takes over. It runs your components, converts JSX(JavaScript XML) into JavaScript objects, what we call the &lt;strong&gt;Virtual DOM&lt;/strong&gt;, and then converts those JavaScript objects into actual DOM nodes the browser can display.&lt;/p&gt;

&lt;p&gt;So your JSX that looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;jsx
`&amp;lt;h1 className="title"&amp;gt;Hello World&amp;lt;/h1&amp;gt;`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;gets converted into a Javascript object like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;js
{
type: "h1",
props:{
className: "title",
children:"Hello World"
}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's your virtual DOM right there, just a plain JavaScript object describing what the UI should look like. React then takes that object and creates an actual DOM node from it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;js
HTMLHeadingElement: node.textContent = "Hello World"`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And appends it to the #root div. Boom, the browser displays it. That's basically CSR.&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%2Fzeyd6a507hgsnpiuiarh.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%2Fzeyd6a507hgsnpiuiarh.png" alt="Client/Server relationship" width="491" height="186"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  State updates and reconciliation
&lt;/h2&gt;

&lt;p&gt;Now a huge part of any UI is state: counter, cart items, form inputs, all of that. When state updates, React doesn't re-download &lt;code&gt;main.js&lt;/code&gt; and redo everything from scratch; that would be crazy expensive.&lt;/p&gt;

&lt;p&gt;What React actually does is look at the component where the update happened, build a new virtual DOM, compare it to the previous one, find what changed, and update only those nodes in the actual DOM. The process is called &lt;strong&gt;reconciliation&lt;/strong&gt; and it's honestly wild how all of this happens without a full page refresh.&lt;br&gt;
And that whole process I just described, the browser downloading JS, React building the virtual DOM, reconciliation and all — &lt;strong&gt;that's Client Side Rendering.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Then SSR came along
&lt;/h2&gt;

&lt;p&gt;SSR is so beautiful because it offloads a huge chunk of this work from the browser and just does it on the server instead.&lt;/p&gt;

&lt;p&gt;Now "the server" can sound confusing, but here is the thing, JavaScript can run in two primary environments: the browser and Node.js. So in SSR, it's Node.js doing all the heavy lifting.&lt;/p&gt;

&lt;p&gt;Here's what happens when you request a page:&lt;br&gt;
The Node.js server runs React, calls your component function, parses JSX, builds the virtual DOM and converts everything into readable HTML, then sends that fully structured HTML straight to the browser. The browser receives real HTML and can display it immediately, no waiting for JS to build everything from scratch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;html
&amp;lt;div id="root"&amp;gt;
&amp;lt;h1&amp;gt;Hello&amp;lt;/h1&amp;gt;
&amp;lt;p&amp;gt;This came from the server&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But that's not the end of it. In the background the JavaScript bundle also loads, and once it does, hydration happens.&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%2Fcgzyukhe4750te3ct8i9.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%2Fcgzyukhe4750te3ct8i9.png" alt="diagram to display hydration flow" width="286" height="716"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Okay but what even is hydration?
&lt;/h2&gt;

&lt;p&gt;Hydration is basically the process of attaching interactivity, specifically event listeners, to the HTML the server already sent. Think of it like the server sending you a fully built house, and hydration is the electrician coming in afterwards to wire everything up.&lt;/p&gt;

&lt;p&gt;In CSR, React uses &lt;code&gt;createRoot&lt;/code&gt; which builds everything from scratch. In SSR, React uses hydrateRoot which assumes the DOM already exists, all it does is recreate the virtual DOM and attach event handlers to the right elements.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;js// CSR - builds from scratch
ReactDOM.createRoot(document.getElementById("root")).render(&amp;lt;App /&amp;gt;);

// SSR - assumes HTML exists, just wires it up
ReactDOM.hydrateRoot(document.getElementById("root"), &amp;lt;App /&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  So How does this affect how I write Next.js Code
&lt;/h2&gt;

&lt;p&gt;Next.js does SSR by default. Every component runs on the server first, even ones marked with &lt;code&gt;"use client"&lt;/code&gt; directive. The difference is that &lt;code&gt;"use client"&lt;/code&gt; tells the compiler that this component needs to be hydrated on the client so it can handle interactivity.&lt;/p&gt;

&lt;p&gt;So the rule is simple, anywhere you need state, effects, browser APIs like &lt;code&gt;document.querySelector&lt;/code&gt; or even event listeners, add &lt;code&gt;"use client"&lt;/code&gt; at the top of the file. If you don't, your code will be trying to access browser APIs that don't exist on the server and you will be staring at errors wondering what went wrong.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"use client";

import { useState } from "react";

export default function Counter() {
  const [count, setCount] = useState(0);
  return &amp;lt;button onClick={() =&amp;gt; setCount(count + 1)}&amp;gt;{count}&amp;lt;/button&amp;gt;;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  So what does this mean for how I build components
&lt;/h2&gt;

&lt;p&gt;Honestly this is the part that changed how I think at work. Once you understand CSR and SSR, you stop throwing &lt;code&gt;use client&lt;/code&gt; everywhere and start asking, does this component actually need to run on the client?&lt;/p&gt;

&lt;p&gt;The mistake I made early on was throwing &lt;code&gt;use client&lt;/code&gt; at the top of every component. It just felt like the thing to do coming from plain React. But once I understood what was actually happening under the hood, I realized I was basically opting out of SSR everywhere and losing all the performance benefits for free.&lt;/p&gt;

&lt;p&gt;A good rule of thumb, if a component just displays data with no clicks, no state, no user interaction, leave it as a server component. Only reach for &lt;code&gt;use client&lt;/code&gt; when the component actually needs to respond to the user. That way the browser only handles what it truly needs to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;It's honestly crazy how much is happening under the hood every time a page loads. Understanding this whole flow — CSR, virtual DOM, reconciliation, SSR, hydration — really changed how I think about building components and where I put my logic.&lt;/p&gt;

&lt;p&gt;Let me know what part clicked for you or if there's anything you'd push back on — I'd really love to hear it.&lt;br&gt;
See you next time. Byeeee &lt;/p&gt;

</description>
      <category>react</category>
      <category>nextjs</category>
      <category>webdev</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
