<?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: P S S Hrithik</title>
    <description>The latest articles on DEV Community by P S S Hrithik (@hrithik_pasumarthi).</description>
    <link>https://dev.to/hrithik_pasumarthi</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%2F1913694%2Faddb4377-1c83-4ef7-aec9-8c5dd4713499.png</url>
      <title>DEV Community: P S S Hrithik</title>
      <link>https://dev.to/hrithik_pasumarthi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hrithik_pasumarthi"/>
    <language>en</language>
    <item>
      <title>🧩 Micro Frontends – The Complete (But Brief) Guide</title>
      <dc:creator>P S S Hrithik</dc:creator>
      <pubDate>Tue, 30 Sep 2025 04:17:54 +0000</pubDate>
      <link>https://dev.to/hrithik_pasumarthi/micro-frontends-the-complete-but-brief-guide-398g</link>
      <guid>https://dev.to/hrithik_pasumarthi/micro-frontends-the-complete-but-brief-guide-398g</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;“Why is our frontend deployment breaking again?”&lt;br&gt;&lt;br&gt;
“Because 5 teams committed to the same monolith... again.” 😩&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sound familiar?&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 What Are Micro Frontends?
&lt;/h2&gt;

&lt;p&gt;Micro Frontends is an architectural approach where a &lt;strong&gt;single frontend app is divided into smaller, semi-independent "micro apps"&lt;/strong&gt;, each owned by different teams and developed, tested, and deployed separately.&lt;/p&gt;

&lt;p&gt;Think of it as &lt;strong&gt;microservices&lt;/strong&gt; for the &lt;strong&gt;frontend&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 Why Use Micro Frontends?
&lt;/h2&gt;

&lt;p&gt;Imagine if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Teams could deploy independently&lt;/li&gt;
&lt;li&gt;Each feature used the best suited tech stack&lt;/li&gt;
&lt;li&gt;Bugs in one area didn’t crash the whole UI&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧭 Types of Micro Frontend Architecture
&lt;/h2&gt;

&lt;p&gt;Micro Frontends can be implemented in different integration strategies:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Client-side Composition
&lt;/h3&gt;

&lt;p&gt;Everything comes together in the browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt;: Webpack Module Federation, SystemJS, single-spa&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Pros&lt;/strong&gt;: More flexibility, dynamic loading&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Cons&lt;/strong&gt;: Initial complexity, managing shared dependencies&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Server-side Composition
&lt;/h3&gt;

&lt;p&gt;Each micro frontend renders on the server, and the final page is assembled there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt;: Edge-side includes (ESI), NGINX, SSR frameworks&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Pros&lt;/strong&gt;: Fast time-to-first-byte, SEO-friendly&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Cons&lt;/strong&gt;: Harder to manage dynamic interactivity across parts&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Build-time Integration
&lt;/h3&gt;

&lt;p&gt;All pieces are built together and deployed as a single app (still independently maintained).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt;: Module Federation with shared build configs&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Pros&lt;/strong&gt;: Easier setup&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Cons&lt;/strong&gt;: Tight coupling, less runtime flexibility&lt;/p&gt;

&lt;h3&gt;
  
  
  4. iFrame Integration
&lt;/h3&gt;

&lt;p&gt;Each micro frontend lives inside its own iframe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt;: None special, just HTML&lt;br&gt;
&lt;strong&gt;Pros&lt;/strong&gt;: Strong isolation&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Cons&lt;/strong&gt;: Performance, communication overhead&lt;/p&gt;




&lt;h2&gt;
  
  
  Architectural Constraints &amp;amp; Considerations
&lt;/h2&gt;

&lt;p&gt;Implementing Micro Frontends isn't a free lunch. Here's what you need to keep in mind:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Constraint&lt;/th&gt;
&lt;th&gt;Consideration&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isolation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Avoid global CSS, shared DOM access, or clashing dependencies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Communication&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use pub-sub models, events, or shared state managers carefully&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Routing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Who owns the router? Use route-based composition or a central router manager&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment Strategy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Independent deployments require versioning and compatibility planning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Design Consistency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Shared design system / tokens needed for a unified look&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Shared Dependencies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use singleton modules in Module Federation to avoid bundle duplication&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  ⚠️ But What About The Trade-Offs?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Challenge&lt;/th&gt;
&lt;th&gt;What It Means for You&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Complex setup&lt;/td&gt;
&lt;td&gt;Initial scaffolding can be tricky&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance overhead&lt;/td&gt;
&lt;td&gt;Improper setup leads to larger bundles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shared state is harder&lt;/td&gt;
&lt;td&gt;Need robust communication patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Design consistency&lt;/td&gt;
&lt;td&gt;Centralized design tokens/components&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Onboarding new devs&lt;/td&gt;
&lt;td&gt;Requires understanding the architecture&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🧰 Common Tools in the Wild
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Tools / Frameworks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Composition Layer&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;single-spa&lt;/code&gt;, &lt;code&gt;Module Federation&lt;/code&gt;, &lt;code&gt;SystemJS&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shared UI Components&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Bit&lt;/code&gt;, &lt;code&gt;Storybook&lt;/code&gt;, design tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Routing&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;single-spa&lt;/code&gt;, custom orchestrators&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;CI/CD pipelines per micro app&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitoring&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Sentry&lt;/code&gt;, &lt;code&gt;LogRocket&lt;/code&gt;, &lt;code&gt;Datadog&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🎯 When Should You Use Micro Frontends?
&lt;/h2&gt;

&lt;p&gt;✅ You have multiple teams working on different parts of the UI&lt;br&gt;&lt;br&gt;
✅ You want independent deployments&lt;br&gt;
✅ You’re modernizing a legacy frontend monolith&lt;br&gt;&lt;br&gt;
✅ You want to gradually migrate from one tech stack to another&lt;br&gt;&lt;br&gt;
✅ You’re building a modular platform or dashboard&lt;/p&gt;

&lt;h2&gt;
  
  
  ❌ When Not to Use It?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Your app is small or managed by a single team&lt;/li&gt;
&lt;li&gt;You don't need frequent independent releases&lt;/li&gt;
&lt;li&gt;You can’t justify the complexity overhead&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✨ Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Micro Frontends bring a scalable, team-friendly solution to frontend complexity.&lt;br&gt;&lt;br&gt;
They’re not always the answer — but when used well, they’re a powerful architectural pattern for large apps and fast-moving teams.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Break the monolith. Embrace autonomy. Stay consistent.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Co-authored with: &lt;a class="mentioned-user" href="https://dev.to/kenzo_tenma"&gt;@kenzo_tenma&lt;/a&gt; &lt;/p&gt;

</description>
      <category>architecture</category>
      <category>frontend</category>
      <category>microservices</category>
    </item>
    <item>
      <title>Level Up Your Projects: Lesser-Known Web APIs Every Developer Should Use</title>
      <dc:creator>P S S Hrithik</dc:creator>
      <pubDate>Fri, 27 Sep 2024 11:59:43 +0000</pubDate>
      <link>https://dev.to/hrithik_pasumarthi/level-up-your-projects-lesser-known-web-apis-every-developer-should-use-56i6</link>
      <guid>https://dev.to/hrithik_pasumarthi/level-up-your-projects-lesser-known-web-apis-every-developer-should-use-56i6</guid>
      <description>&lt;p&gt;In the ever-evolving world of web development, many APIs have become familiar that we use without much thought. Yet, there are several lesser-known APIs that can greatly enhance your projects and streamline your coding process. In this blog, we’ll delve into some of these hidden gems, featuring code examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Intersection Observer API
&lt;/h2&gt;

&lt;p&gt;The Intersection Observer API lets you watch when a target element comes into or goes out of view in the browser. This means you can easily know when elements are visible on the screen, allowing you to trigger actions based on whether they’re seen by the user.&lt;/p&gt;

&lt;p&gt;Here’s a simple example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define the callback function&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;callback&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;observer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entry&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isIntersecting&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Element is visible in viewport!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="c1"&gt;// Perform actions like loading content or triggering animations&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Element is out of view.&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;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Create an observer instance&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;observer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;IntersectionObserver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Target the element to observe&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#targetElement&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;observer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;observe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Code Explanation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Callback Function:&lt;/strong&gt; This function is called whenever the intersection state of the target changes. It receives an array of entries, each representing a target element being observed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observer Instance:&lt;/strong&gt; An instance of IntersectionObserver is created using the callback function.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observing Elements:&lt;/strong&gt; You call observe() on the observer instance, passing in the target element.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Use Intersection Observer?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance Optimization:&lt;/strong&gt; Instead of constantly checking the position of elements during scroll events, the Intersection Observer provides a more efficient way to track visibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enhanced User Experience:&lt;/strong&gt; You can create smooth animations, lazy load images, and implement infinite scrolling, all based on when elements come into view.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Resize Observer API
&lt;/h2&gt;

&lt;p&gt;Maybe you’re working on a responsive design and need to adjust layouts dynamically. Enter Resize Observer API!, The Resize Observer API allows you to watch for changes in the dimensions of an element. This is super useful for creating responsive designs that adapt to various screen sizes or dynamic content changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Does Resize Observer Work?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Resize Observer lets you create a new observer that will call a callback function whenever an observed element changes size. Let’s take a look at how to use it!&lt;/p&gt;

&lt;p&gt;Here’s a simple example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Select the element you want to observe&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;box&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.box&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Create a new ResizeObserver instance&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;observer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ResizeObserver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entries&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;entry&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Element:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;New width:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;contentRect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;New height:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;contentRect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&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;span class="c1"&gt;// Start observing the element&lt;/span&gt;
&lt;span class="nx"&gt;observer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;observe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;box&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you ever need to stop monitoring the box, you can call &lt;code&gt;unobserve()&lt;/code&gt; on the observer instance. This is useful for performance reasons or when the element is no longer relevant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical Use Cases :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Responsive Layouts&lt;/li&gt;
&lt;li&gt;Dynamic Content Management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a comprehensive resource, you might want to check out these fantastic YouTube tutorials &lt;a href="https://www.youtube.com/watch?v=2IbRtjez6ag" rel="noopener noreferrer"&gt;Intersection Observer&lt;/a&gt; , &lt;a href="https://www.youtube.com/watch?v=M2c37drnnOA" rel="noopener noreferrer"&gt;Resize Observer&lt;/a&gt;, which I found very useful for understanding the concepts.&lt;/p&gt;

&lt;p&gt;Thank you! Happy Coding!!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>webapi</category>
    </item>
    <item>
      <title>Mastering End-to-End Testing: Which Tool Cypress or Playwright Should You Choose?</title>
      <dc:creator>P S S Hrithik</dc:creator>
      <pubDate>Sun, 01 Sep 2024 13:57:47 +0000</pubDate>
      <link>https://dev.to/hrithik_pasumarthi/mastering-end-to-end-testing-which-tool-cypress-or-playwright-should-you-choose-38ee</link>
      <guid>https://dev.to/hrithik_pasumarthi/mastering-end-to-end-testing-which-tool-cypress-or-playwright-should-you-choose-38ee</guid>
      <description>&lt;p&gt;In the fast-paced world of web development, making sure your apps run flawlessly and meet user expectations is essential, That's where end-&lt;br&gt;
to-end (E2E) testing tools come in. Two big names in this arena are Cypress and Playwright. Both are powerful tools for testing modern web apps, but they each have their own unique features and differences. In this blog post, we’ll break down what makes Cypress and Playwright stand out, and help you figure out which one might be the best fit for your project. Ready to dive in? Let’s get started😎!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features Comparison&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Browser Support&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cypress:&lt;/strong&gt; Traditionally, Cypress has been known for its robust support for Chromium-based browsers like Google Chrome and Microsoft Edge. If you're focusing on these environments, Cypress provides a reliable and optimized testing experience. However, it's worth noting that while recent versions have introduced experimental support for WebKit, this is not as mature or stable as its support for Chromium-based browsers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Playwright:&lt;/strong&gt; Here, Playwright shines with its broad support across different browsers. It offers first-class compatibility with Chromium, Firefox, and WebKit (which powers Safari). This extensive browser support is particularly advantageous if you need to ensure your application performs well across various platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which browsers are most crucial for your testing 🤔?&lt;/strong&gt; &lt;br&gt;
If cross-browser compatibility is a key requirement for your project, Playwright might be the more suitable choice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Test Execution Speed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cypress:&lt;/strong&gt; Known for its impressive test execution speed, Cypress benefits from an architecture that runs directly inside the browser. This design minimizes the need for explicit waits, as Cypress incorporates automatic waiting and retries, thus accelerating your testing process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Playwright:&lt;/strong&gt; Similarly, Playwright offers rapid test execution and supports parallel testing right out of the box. By allowing multiple browsers or contexts to run simultaneously, Playwright can significantly enhance the speed of your test runs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. API and Syntax&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cypress:&lt;/strong&gt; Cypress provides a user-friendly syntax that simplifies test writing. Its API is well-documented, and the interactive Test Runner offers a visual representation of your application's state at each step of the test. This can be particularly helpful for understanding test behaviors and outcomes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Playwright:&lt;/strong&gt; On the other hand, Playwright offers a more extensive API that grants greater flexibility. While its syntax might be more complex, it allows for detailed control over browser interactions. This can be advantageous for intricate testing scenarios that require fine-tuned automation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How comfortable are you with complex APIs and syntaxes?&lt;/strong&gt;&lt;br&gt;
If you prefer simplicity and ease of use, Cypress might be your go-to. For those who need more control and customization, Playwright could be the better option.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Network Interception and Mocking&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cypress:&lt;/strong&gt; Cypress offers robust network stubbing and mocking capabilities. This feature allows you to intercept and modify network requests and responses, which is essential for testing edge cases and interacting with third-party services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Playwright:&lt;/strong&gt; Playwright also supports network interception and mocking, with a flexible API that integrates well with its broader automation features. This means you can handle complex network scenarios effectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do you need to handle complex network interactions in your tests?&lt;/strong&gt; Both tools provide powerful network handling features, but the best choice might depend on your specific needs for mocking and intercepting requests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Debugging and Error Handling&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cypress:&lt;/strong&gt; Cypress excels in debugging with features like time-travel debugging, detailed error messages, and snapshots of your application's state during test execution. The interactive Test Runner provides an intuitive debugging experience that can simplify the troubleshooting process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Playwright:&lt;/strong&gt; Playwright offers detailed logs and snapshots for debugging. Although its debugging experience might not be as interactive as Cypress's, it remains powerful and effective, especially when combined with its extensive API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How important is an interactive debugging experience for you?&lt;/strong&gt;&lt;br&gt;
If you value detailed, interactive debugging tools, Cypress might be the better choice. For a more traditional approach with strong logging, Playwright is worth considering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deciding between Cypress and Playwright depends on your specific needs and project requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Cypress:&lt;/strong&gt; If you need a tool with straightforward setup and strong in-browser testing for Chromium-based browsers. It’s ideal for projects that prioritise simplicity and ease of use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Playwright:&lt;/strong&gt; If you require extensive cross-browser testing, support for multiple browser engines, or advanced automation features. Its flexibility and comprehensive API make it well-suited for projects with diverse testing needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What factors are most important for your testing strategy?&lt;/strong&gt; &lt;br&gt;
Share your thoughts and experiences! Whether you lean towards Cypress or Playwright.&lt;/p&gt;

</description>
      <category>playwright</category>
      <category>cypress</category>
      <category>webdev</category>
      <category>testing</category>
    </item>
    <item>
      <title>React and WebAssembly</title>
      <dc:creator>P S S Hrithik</dc:creator>
      <pubDate>Sun, 11 Aug 2024 13:21:55 +0000</pubDate>
      <link>https://dev.to/hrithik_pasumarthi/react-and-webassembly-52m4</link>
      <guid>https://dev.to/hrithik_pasumarthi/react-and-webassembly-52m4</guid>
      <description>&lt;p&gt;React has totally changed the game for building websites. It's like magic for crafting those slick, interactive pages we all love. Now, imagine combining that with WebAssembly – this super-fast, low-level language that's like rocket fuel for your browser. Together, they're an unstoppable duo, cranking out web apps that are super-quick and packed with features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding WebAssembly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;WebAssembly isn't actually a language you code in. Think of it more like a super-fast translator. It takes code written in languages like C, C++, Rust, or Go and turns it into a format that computers understand really quickly. This means those speedy languages can now run directly in your browser, almost as fast as if they were native apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integrating WebAssembly with React&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To integrate WebAssembly with React, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Compile code to WebAssembly&lt;/strong&gt; - Use a compiler to convert your code (written in C, C++, Rust, or Go) into a WebAssembly module (.wasm file).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Load the WebAssembly module&lt;/strong&gt; - Use JavaScript to load the .wasm file into the browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a JavaScript interface&lt;/strong&gt; - Expose functions from the WebAssembly module to JavaScript using the WebAssembly API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrate with React&lt;/strong&gt; - Use the exposed functions within your React components to interact with the WebAssembly module.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Code Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's create a basic example where we use WebAssembly to generate prime numbers within a specified range and display them in a React component.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C code (prime_numbers.c):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;emscripten.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdbool.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="n"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;is_prime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&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="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;nbsp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;generate_primes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Pre-allocate an array to store primes (might need adjustment based on range)&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;primes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;upper&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;lower&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;is_prime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;primes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&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;span class="c1"&gt;// Reallocate the array to the actual number of primes (optional for memory efficiency)&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="n"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;primes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;EMSCRIPTEN_BINDINGS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;my_module&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;emscripten_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"is_prime"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"is_prime"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;allow_raw_pointers&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
  &lt;span class="n"&gt;emscripten_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"generate_primes"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"generate_primes"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;allow_raw_pointers&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;p&gt;&lt;strong&gt;Compile the C code to WebAssembly:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bash&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;emcc prime_numbers.c -o prime_numbers.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;React component:&lt;/strong&gt;&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="nx"&gt;mport&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&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;react&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;PrimeNumberGenerator&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;lowerBound&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setLowerBound&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;upperBound&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setUpperBound&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;primes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setPrimes&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;script&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;prime_numbers.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;script&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;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;generatePrimes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;wasmPrimes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;_generate_primes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lowerBound&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;upperBound&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;primeList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Int32Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wasmPrimes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;setPrimes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;primeList&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// Convert to regular array for easier use&lt;/span&gt;
    &lt;span class="nx"&gt;Module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;_free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wasmPrimes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Free the allocated memory in Wasm&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="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"number"&lt;/span&gt;
        &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;lowerBound&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setLowerBound&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"number"&lt;/span&gt;
        &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;upperBound&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setUpperBound&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;generatePrimes&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Generate Primes&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;primes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prime&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;prime&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;prime&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;PrimeNumberGenerator&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In this example:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We define a C function to calculate prime numbers within a given range.&lt;/li&gt;
&lt;li&gt;We compile this C code into a WebAssembly module using Emscripten.&lt;/li&gt;
&lt;li&gt;In our React component, we load the generated WebAssembly module.&lt;/li&gt;
&lt;li&gt;We create a JavaScript function to call the WebAssembly function for prime number generation.&lt;/li&gt;
&lt;li&gt;We update the component's state with the calculated prime numbers and display them in a list.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Key benefits of WebAssembly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt;: WebAssembly (Wasm) excels in executing code at significantly higher speeds compared to JavaScript. This makes it an optimal choice for applications demanding substantial computational resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portability&lt;/strong&gt;: Wasm modules can run on different platforms and browsers without modification.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leverage existing codebases&lt;/strong&gt;: Reuse existing C, C++, or Rust libraries in web applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced user experience&lt;/strong&gt;: Provide smoother animations, faster load times, and better responsiveness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access to hardware features&lt;/strong&gt;: WebAssembly can potentially access hardware features like GPU acceleration, opening up new possibilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Wasm has a sandboxed environment, ensuring that code runs safely within the browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Additional Considerations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance profiling&lt;/strong&gt;: Identify performance bottlenecks and determine if WebAssembly is the right solution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development complexity&lt;/strong&gt;: WebAssembly can introduce additional complexity to the development process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser compatibility&lt;/strong&gt;: Ensure compatibility across different browsers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br&gt;
React and WebAssembly form a powerful combination for building high-performance web applications. By understanding their strengths and how to integrate them effectively, developers can create exceptional user experiences.&lt;/p&gt;

</description>
      <category>react</category>
      <category>c</category>
      <category>webassembly</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
