What is the Difference between Server Side Rendering and Client Side Rendering
Tags: ssr, csr, react, serverless
Published: 2023-05-29 14:11:33

**Client-side rendering (CSR)** refers to the process of rendering a web application or website on the client-side, i.e., in the user's web browser, using JavaScript. In CSR, the server primarily sends the HTML, CSS, and JavaScript files to the client, and the client's browser takes care of rendering the user interface and managing the application state.

Here's a high-level overview of how client-side rendering works:

**Initial request:** The client (web browser) sends a request to the server for the web application or website.

**Server response:** The server responds with the initial HTML file, which often contains the basic structure and layout of the page, along with references to CSS and JavaScript files.

**HTML parsing:** The client-side JavaScript engine parses the received HTML file and starts rendering the page's basic structure.

**CSS and JavaScript loading:** The client starts fetching the referenced CSS and JavaScript files mentioned in the HTML.

**CSS styling:** As the CSS files are loaded, the client applies the styles to the rendered HTML structure, making the page visually appealing.

**JavaScript execution:** Once the JavaScript files are loaded, the client executes them, which can manipulate the DOM (Document Object Model), handle user interactions, fetch data from APIs, and perform other dynamic operations.

**Dynamic updates:** With the help of JavaScript, the client can make additional requests to the server, retrieve data, and dynamically update the page without needing a full page reload. This enables smoother user experiences, such as dynamic content loading, real-time updates, and interactive interfaces.

Client-side rendering provides several advantages, including:

**Interactivity:** Since the rendering and UI updates happen on the client-side, users can experience faster and more interactive interfaces, as they don't have to wait for the server to process every request.

**Code reusability:** With frameworks like React or Vue.js, developers can build reusable UI components, which can be efficiently rendered and reused across different parts of the application.

**Rich user experiences:** Client-side rendering allows for creating dynamic and highly interactive web applications that can provide a more engaging user experience through features like animations, transitions, and real-time updates.

However, client-side rendering also has some considerations:

**Initial load time:** The initial load time can be slower compared to server-side rendering (SSR) because the client needs to fetch and process all the necessary JavaScript and CSS files before rendering the page.

**SEO challenges:** Search engines typically prefer static HTML content for indexing, and with CSR, the initial HTML sent by the server might not include all the content that needs to be indexed. Techniques like server-side rendering (SSR) or pre-rendering are often used to address this issue.

**Browser compatibility:** Different web browsers have varying JavaScript engine capabilities, and older browsers may not support the latest JavaScript features used in client-side rendering. This requires developers to consider browser compatibility and potentially include fallback mechanisms.

Overall, client-side rendering is a powerful approach for building dynamic web applications that offer a highly interactive user experience. It has gained popularity with the advent of modern JavaScript frameworks and libraries that facilitate efficient client-side rendering and state management.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fzs0cmsdvmd2xfts2bsk.png)

```
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CSR</title>
</head>
<body>
<div id="root"><!-- blank --></div>
<script src="/bundle.js"></script>
</body>
</html>
```

## Server-side rendering (SSR) is a web application rendering technique where the server generates the complete HTML content of a web page and sends it to the client (web browser) for display. In SSR, the server processes the request, fetches the necessary data, and generates the HTML markup with the populated data, which is then sent to the client as a fully rendered page.

Here's a high-level overview of how server-side rendering works:

**Initial request:** The client sends a request to the server for a specific web page.

**Server processing:** The server receives the request and starts processing it. This may involve fetching data from databases, external APIs, or performing other operations to gather the necessary information to render the page.

**HTML generation:** The server uses server-side rendering techniques, often utilizing a server-side framework or library, to generate the complete HTML markup for the requested page. This includes inserting the retrieved data into the appropriate placeholders within the HTML structure.

**Complete response:** Once the server has generated the HTML content, it sends the complete HTML response back to the client.

**Client rendering:** The client (web browser) receives the HTML response and starts rendering it immediately. The browser displays the content to the user as it becomes available, even before all the external assets such as CSS and JavaScript are loaded.

**CSS and JavaScript loading:** Alongside rendering the initial HTML, the client starts fetching the necessary CSS and JavaScript files referenced in the HTML to complete the page's styling and functionality.

**JavaScript execution:** As the required JavaScript files are loaded, the client executes them, enabling dynamic functionality and interactivity on the page.

Server-side rendering offers several benefits, including:

**SEO friendliness:** Search engines can easily crawl and index the fully rendered HTML content, as it is immediately available in the initial response. This can improve search engine optimization and discoverability of the web pages.

**Improved initial load time:** With server-side rendering, the client receives a fully rendered HTML page from the server, allowing the user to see the content sooner, even before additional assets like CSS and JavaScript are loaded.

**Consistent user experience:** Since the server generates the complete HTML markup, the rendered content is consistent across different browsers and devices, ensuring a consistent user experience.

However, there are some considerations to keep in mind with server-side rendering:

**Increased server load:** Server-side rendering requires additional server-side processing to generate the HTML response for each request. This can put more load on the server compared to client-side rendering.

**Reduced interactivity:** Server-side rendering does not provide the same level of interactivity and dynamic updates as client-side rendering. To achieve more dynamic behavior, additional client-side JavaScript might be necessary.

**Delayed client-side functionality:** While the initial rendering is faster with server-side rendering, any client-side functionality that relies on JavaScript might experience a slight delay since the JavaScript files need to be loaded and executed after the initial rendering.

Server-side rendering is often used in combination with client-side rendering techniques, depending on the specific requirements of the web application. Hybrid rendering approaches, such as "hybrid rendering" or "progressive rendering," can be employed to leverage the benefits of both server-side and client-side rendering techniques, providing an optimal user experience and performance balance.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bljramxvb853ppulawsh.png)

```
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>SSR</title>
    </head>
    <body>
        <div id="root">
            <div class="container">
                <h2>Server Side Rendering</h2>
                <p>
                    This content was rendered on Server Side
                </p>
            </div>
        </div>
        <script src="/bundle.js"></script>
    </body>
</html>
```