Static Site Generation vs Server-Side Rendering in React

Table of Contents

  1. Introduction
  2. What is Static Site Generation (SSG)?
  3. What is Server-Side Rendering (SSR)?
  4. Key Differences Between SSG and SSR
  5. Benefits and Drawbacks of SSG
  6. Benefits and Drawbacks of SSR
  7. When to Use Static Site Generation (SSG)?
  8. When to Use Server-Side Rendering (SSR)?
  9. SSG vs SSR: Case Studies
  10. Next.js: Implementing SSG and SSR
  11. Conclusion

1. Introduction

In modern web development, performance, SEO, and user experience are paramount. To achieve these goals, React applications often leverage Static Site Generation (SSG) and Server-Side Rendering (SSR) techniques to optimize page rendering. This module explores the differences between SSG and SSR, their benefits, and how they can be used in React apps to enhance performance and SEO.


2. What is Static Site Generation (SSG)?

Static Site Generation (SSG) is a method of pre-rendering web pages at build time. This means that when you build the project, the content is generated into static HTML files that can be served quickly by a CDN (Content Delivery Network).

  • Pre-rendering happens during the build process.
  • Once generated, the page content does not change unless the site is rebuilt.
  • Ideal for content that doesn’t change frequently, like blogs, portfolios, or documentation sites.

In SSG, getStaticProps is used to fetch data at build time and generate static HTML for each page.

Example:

jsxCopyEdit// pages/index.js
export async function getStaticProps() {
  const data = await fetch('https://api.example.com/posts');
  const posts = await data.json();

  return { props: { posts } };
}

const Home = ({ posts }) => {
  return (
    <div>
      <h1>Static Site Posts</h1>
      {posts.map(post => (
        <div key={post.id}>
          <h2>{post.title}</h2>
          <p>{post.body}</p>
        </div>
      ))}
    </div>
  );
};

export default Home;

3. What is Server-Side Rendering (SSR)?

Server-Side Rendering (SSR) refers to the technique of rendering the React components on the server for every page request. The server generates the full HTML page on each request, which is then sent to the client.

  • Content is generated on the server at the time of the request.
  • Suitable for dynamic content, such as user-specific data or content that changes frequently.
  • Uses getServerSideProps to fetch data and render pages on the server before sending them to the client.

Example:

jsxCopyEdit// pages/dashboard.js
export async function getServerSideProps() {
  const data = await fetch('https://api.example.com/user');
  const user = await data.json();

  return { props: { user } };
}

const Dashboard = ({ user }) => {
  return (
    <div>
      <h1>Welcome {user.name}!</h1>
    </div>
  );
};

export default Dashboard;

4. Key Differences Between SSG and SSR

FeatureStatic Site Generation (SSG)Server-Side Rendering (SSR)
Rendering TimeBuild time (at deployment)Request time (for each user request)
Content FreshnessStatic content (must rebuild for updates)Fresh content on each request (real-time)
SEO PerformanceGreat for SEO (pre-rendered HTML)Great for SEO (pre-rendered HTML)
SpeedFast, served via CDNSlower than SSG due to on-demand rendering
Use CasesBlogs, documentation, marketing sitesUser dashboards, dynamic data sites
Data Fetching MethodgetStaticProps (build time)getServerSideProps (request time)

5. Benefits and Drawbacks of SSG

Benefits of SSG:

  • Fast Loading: Since pages are pre-rendered, they can be served instantly via CDN.
  • Cost-Effective: Reduced server load because no computation is required at request time.
  • SEO-Friendly: Pre-rendered content is ready for search engines to index.

Drawbacks of SSG:

  • Stale Data: Requires rebuilding the site for updates. Content changes are only reflected after a new build.
  • Not Ideal for Dynamic Content: Not suitable for applications with frequently changing content, such as user profiles or live data.

6. Benefits and Drawbacks of SSR

Benefits of SSR:

  • Fresh Content: Always serves the most up-to-date content on each request, which is useful for user-specific data.
  • SEO-Friendly: Just like SSG, SSR provides fully rendered HTML to search engines, which enhances SEO.

Drawbacks of SSR:

  • Slower Load Time: Pages need to be rendered on the server for each request, which can add latency.
  • Higher Server Load: Increased server-side processing may impact scalability, especially with high traffic.

7. When to Use Static Site Generation (SSG)?

SSG is perfect for:

  • Websites where content does not change frequently, like blogs, documentation, and portfolios.
  • Landing pages or marketing sites that can be cached by CDNs.
  • E-commerce websites with a fixed catalog of products.

Use SSG when:

  • Performance and SEO are a priority.
  • You can tolerate content that updates at build time (not in real-time).

8. When to Use Server-Side Rendering (SSR)?

SSR is ideal for:

  • Websites with frequently changing content or personalized data (e.g., user dashboards).
  • Applications where SEO is important, but real-time updates are essential.
  • Websites that require dynamic data fetching on each request.

Use SSR when:

  • Your data is highly dynamic, and you need to ensure users see the most up-to-date content.
  • Real-time performance is a critical factor.

9. SSG vs SSR: Case Studies

Case 1: Blog Platform

For a blog platform, static site generation (SSG) would be ideal. The content (posts, articles) is not updated frequently, and SEO is crucial. By using SSG, you can generate static HTML for all posts during the build time and serve them via CDN, ensuring fast load times.

Case 2: E-Commerce Store

An e-commerce store with a dynamic inventory system would benefit from SSR. Product availability, pricing, and inventory are frequently changing, so rendering pages on the server ensures the users see the most accurate and up-to-date content.


10. Next.js: Implementing SSG and SSR

Next.js makes it incredibly easy to implement both SSG and SSR with the getStaticProps and getServerSideProps functions, respectively.

  • For SSG, you use getStaticProps to fetch the data and generate static pages at build time.
  • For SSR, you use getServerSideProps to fetch data on each request and render the page on the server.

11. Conclusion

Both Static Site Generation (SSG) and Server-Side Rendering (SSR) are powerful rendering techniques in React, but they are suited for different use cases. SSG is perfect for static content, offering faster load times and better performance, while SSR is ideal for dynamic content that changes on every request. By understanding the benefits and trade-offs of both methods, you can make informed decisions on how to implement rendering strategies in your React applications, particularly when using frameworks like Next.js.