Client vs Server Components in Next.js.pptx

UdithaKasun3 55 views 30 slides Sep 25, 2024
Slide 1
Slide 1 of 30
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30

About This Presentation

Comparison between Client and Server Components in Next.js


Slide Content

CLIENT VS SERVER COMPONENTS IN NEXT.JS { } ...

Next.js is a React framework for building full-stack web applications. You use React Components to build user interfaces, and Next.js for additional features and optimizations. Under the hood, Next.js also abstracts and automatically configures tooling needed for React, like bundling, compiling, and more. This allows you to focus on building your application instead of spending time with configuration What is Next.js? } ..

Evolution of Next.js *

Client and Server Side Rendering In built support for simplified data fetching Main Features File based router built on top of Server components In built support for CSS Modules, Tailwind CSS and CSS-in-JS Image, Fonts and Scripts Optimizations Improved support for Typescript Routing Rendering Data Fetching Styling Optimizations Typescript { } .. .. *

Client vs Server The server refers to the computer in a data centre that stores your application code, receives request from the client, does some computation, and sends back an appropriate response. The client refers to the browser on a user’s device, that sends a request to a server for your application code. It then turns the response from the server into an interface that the user can interact with. Client Server { }

Client Components { } ...

} Client-side components are components fetched and rendered on the client-side i.e. your browser. They are your typical React components that get included in the Browser's JavaScript bundle. {

The server refers to the computer in a data centre that stores your application code, receives request from the client, does some computation, and sends back an appropriate response. } * Without Server Side Rendering With Server Side Rendering

Usage Client Components are opt-in You must explicitly specify which components React should render on the client by adding the use client directive You don’t need to declare use client in every client-rendered component. Once defined, it creates a client boundary and applies to all child components and imported modules within that boundary as client components

Key Features Client components allow you to handle UI interactions (e.g., button clicks, form inputs) that require dynamic state management or event handling These components are rendered in the browser, enabling client-side features like DOM manipulation, browser APIs (e.g., localStorage, window, document), and other client-side JavaScript features. Interactivity Browser-Only Execution They can manage and hold local state using hooks like useState, useEffect, and other React-specific hooks that run only in the client environment Stateful Logic Client components are hydrated after the page is loaded from the server, which means they take over the static or server-rendered HTML and convert it into a fully interactive page Hydration

Key Features Once hydrated, interactions within client components are fast, as they don’t require full-page reloads or server calls to update content unless explicitly needed Client components can use dynamic() to load parts of the component only when needed, reducing the initial JavaScript bundle size and improving load times Fast Interactions Dynamic Imports They allow the use of libraries that require browser-specific features like animations (framer-motion), data-fetching clients (e.g., axios), or authentication SDKs (e.g., auth0) Third-Party Libraries Since they are rendered on the client, they don’t contribute to initial SEO directly. The server sends down basic HTML, and the content generated by client components is added later, meaning search engines might not index them efficiently unless proper handling is done Reduced SEO Efficiency

Server Components { } ...

Server Components in NextJS are components that are rendered directly on the server. By default, all components in Next.js application are treated as Server Components. This approach is transformative because it executes React components on the server side, sending only the rendered output to the client. } {

Server Components can be made asynchronous for efficient data fetching When it comes to user interactivity that relies on hooks like useState or useEffect, Server Components face limitations since they do not have access to client-side behaviours Server components do not ship any JavaScript to the browser. Since they handle static rendering, data fetching, and business logic on the server, the client only receives the HTML, resulting in minimal overhead on the client-side Usage

Key Features Server components are rendered on the server, delivering fully prepared HTML to the client. This allows pages to load faster and reduces the client-side processing required for initial render Server components do not ship JavaScript to the client. This reduces the JavaScript bundle size, leading to faster page loads, especially important for content-heavy or static sections of a website Server-Side Rendering Zero JavaScript on the Client Since server components are rendered on the server and the HTML is fully generated before it reaches the client, they are inherently SEO-friendly, providing complete content to search engines right away Improved SEO Server components can fetch data directly on the server without exposing API requests to the client. This can simplify security, reduce client complexity, and optimize data fetching strategies like SSR or static generation Data Fetching on the Server

Key Features Server components can deliver faster initial page loads by moving heavy lifting (e.g., data fetching, rendering) to the server, which can be more efficient for large, content-heavy applications or pages with complex logic Server components do not maintain local or reactive state, making them ideal for static content or parts of your app that don't need client-side interactivity, such as static pages, product listings, or blog posts Optimized Performance No Client-Side State Server components can be combined with client components. Server components handle static or SSR logic, while client components handle interactivity and dynamic behavior. This enables a hybrid approach, optimizing what needs to run on the server vs. the client Seamless Integration with Client Components Since server components are rendered on the server, you can keep your client-side codebase smaller, focusing only on interactivity, while offloading static rendering and logic-heavy operations to the server Reduced Client-Side Complexity

Next.js PHP

Server Components vs SSR Rather than returning HTML, the Server components return a description of the rendered UI. This allows React to intelligently merge that data with existing client components without losing state.

Client Components in Server Components Here the Blog is a server component and BlogSearch is a client component and we can import the client component into the server component and also the client component can be a child of the server component. This integration is made possible because server components, when rendered, can include references to client components. This process informs the bundler to package the client component’s code separately, which is then sent to the browser for execution. This combination allows us to leverage the strengths of both server-side efficiency and client-side interactivity in our applications such as the server component handles the initial rendering and data fetching, and the client component takes over for interactive elements.

Server Components in Client Components It’s not possible because client components, which execute in the browser, can’t dynamically call server-side code during their rendering

Work Around To include a server component within a client component, you need to use the {children} prop, the same way we use it for React Context. This prop allows you to include arbitrary React components within the client component, including server components.

Pros Cons Smaller Bundle Faster Rendering Server is controllable vs different kind of browser Hydrate only what is needed Keep sensitive data on the server Caching No CSS-in-JS React Context does not work More things to think about More work on server Need to control which part hydrate

How to Choose ?

Thank you !!!