High-performance

Next.js

Michele Riva

Michele Riva

Senior Software Architect @NearForm

Google Developer Expert

Microsoft MVP

MicheleRivaCode

Real-World Next.js

Build scalable, high performances and modern web applications using Next.js, the React framework for production

MicheleRivaCode

MicheleRivaCode

What is Next.js?

MicheleRivaCode

Client-side rendering (CSR)

MicheleRivaCode

Client-side rendering (CSR)

MicheleRivaCode

CSR pros and cons

  • It makes your app feel like a native app
  • Page transitions made easy
  • Lazy loading and performances
  • Less server-side workload
  • No server required (CDN is enough)
  • Bad for SEO
  • Bad initial page load time

Pros

Cons

MicheleRivaCode

Server-side Rendering (SSR)

MicheleRivaCode

SSR pros and cons

Pros

Cons

  • More secure webapps*
  • More compatible websites
  • Enhanced search engine optimization
  • Highly dynamic content
  • Server is required
  • High server workload
  • Higher maintenance costs

MicheleRivaCode

Static-site generation (SSG)

MicheleRivaCode

SSG pros and cons

Pros

Cons

  • Easy to scale
  • Outstanding performances
  • More secure requests
  • Server is not required (CDN is enough)
  • No dynamic content on the server-side
  • Relies on CSR for dynamic content
  • Need to rebuild and deploy the whole site on each page change*

*can be fixed via incremental static regeneration (ISR)

MicheleRivaCode

MicheleRivaCode

Client-side rendering

MicheleRivaCode

Server-side rendering

MicheleRivaCode

Static site generation

MicheleRivaCode

Incremental Static Regeneration (ISR)

MicheleRivaCode

MicheleRivaCode

MicheleRivaCode

MicheleRivaCode

MicheleRivaCode

MicheleRivaCode

MicheleRivaCode

MicheleRivaCode

git clone git@github.com:micheleriva/high-performance-nextjs-workshop.git

MicheleRivaCode

npm i -g autocannon

MicheleRivaCode

Task 1

- Build the Next.js app

- Run autocannon against it

- Change getServerSideProps into getStaticProps

- Run autocannon again

- Compare results

15min

MicheleRivaCode

npm i -g clinic

MicheleRivaCode

Task 2

- Build the Next.js app

- Run the script below

- Comment the results

clinic doctor \
  --autocannon [ http://localhost:3000 -c 500 -d 30 ] \
  -- node node_modules/.bin/next start

15min

MicheleRivaCode

Task 3

- Create a new page for each product

- Which rendering method will you use?

30min

MicheleRivaCode

Hands-on ADRs

MicheleRivaCode

Scenario

You have to write a social network webapp.

The homepage is common for every user, content changes depending on the logged-in user.

MicheleRivaCode

Task 4

Write an ADR to determine the best strategy for rendering the homepage

Template: https://adr.github.io/madr/examples.html#long-version

20min

MicheleRivaCode

Task 5

Write an ADR to determine the best strategy for rendering a single post page

Template: https://adr.github.io/madr/examples.html#long-version

20min

MicheleRivaCode

Task 6

Write an ADR to determine the best strategy for rendering the private "account" page

Template: https://adr.github.io/madr/examples.html#long-version

20min

MicheleRivaCode

Scenario

You have to write an e-commerce webapp.

The homepage needs to be SEO compliant and fast.

Content changes from time to time (one every 2 days).

MicheleRivaCode

Task 7

Write an ADR to determine the best strategy for rendering the e-commerce homepage

Template: https://adr.github.io/madr/examples.html#long-version

20min

MicheleRivaCode

Task 8

Write an ADR to determine the best strategy for rendering the single product page

Template: https://adr.github.io/madr/examples.html#long-version

20min

MicheleRivaCode

Task 9

Write an ADR to determine the best strategy for rendering the private "account" page

Template: https://adr.github.io/madr/examples.html#long-version

10min

MicheleRivaCode

Q&A

MicheleRivaCode

@MicheleRiva

@MicheleRivaCode

/in/MicheleRiva95

www.micheleriva.dev

High-performance Next.js

By Michele Riva

High-performance Next.js

  • 393