Các khái niệm liên quan Server-side Rendering vs Static Generation

Các khái niệm liên quan Server-side Rendering vs Static Generation

·

3 min read

A. SPA (Single Page Application) vs MPA (Multi Page Application)

1. SPA (Single Page Application)

  • Là 1 trang html, browser sẽ điều hướng router, không reload page khi thay đổi route, mỗi khi sang màn hình khác thì client sẽ dùng js để render ra

Ưu điểm

  • Nhanh vì mỗi lần sang 1 page khác thì javascript phía client (đã tải về từ server khi vào màn hình lần đầu) sẽ render ra mã html mà k cần call lại phía server, mà chỉ call API về sau đó xử lí logic phía client và render, giảm phần việc của server

Nhược điểm

  • Lần đầu load lâu vì có nhiều file js(modules, DI), nếu app lớn => có khi cũng chậm vì client phải xử lí nhiều logic (logic, tìm nạp dữ liệu, tạo template và định tuyến)
  • Khó SEO vì gg crawler không biết nội dung nó là gì
  • Phải xử lí nhiều việc ở client: call API, render ...
  • Code js nhiều nên không quản lý tốt dễ bị memory leak: event listenner, DOM event (click, mouse ...), timeout ...

2. MPA (Multi Page Application)

  • Mỗi khi vào 1 đường dẫn => server trả về 1 file HTMl
  • Việc điều hướng do server thực hiện => reload lại mỗi khi sang 1 page khác

B. SSR (Server-side Rendering) vs SSG (Static-site Generation)

  • Pre-render là render sẵn HTML phía server, client sẽ lấy HTML về và hiển thị, tốt cho SEO

1. SSR (Server-side Rendering)

user request => server lấy dữ liệu => tạo HTML => trả về cho user, mỗi lần request thì server lại tạo HTML trả về

  • Khi chuyển page (thẻ link) thì nó cũng không reload lại, router do client điều hướng, khi chuyển sang page khác thì client dùng js render html -Logic tại method getServerSideProps sẽ được thực thi tại thời điểm user request và thực thi trên server, data sẽ được trả về file json cho client
  • 1 component là SSG khi nó export async function getServerSideProps()

2. SSG (Static-site Generation)

  • Build => toàn bộ các file html được render sẵn => deploy => khi user request lên thì nó trả về html sẵn để hiển thị
  • Giống single page, khi redirect thì nó k reload page, khi chuyển sang page khác thì client dùng js render html
  • Toàn bộ logic đã được thực thi tại thời điểm build, kể cả call API => lúc build nó call luôn - call phía server chứ không phải call trên browser (trong nextjs thì call nó trong method getStaticProps)
  • 1 component là SSG khi nó export async function getStaticProps()

C. Khuyến cáo

  • Nên dùng SSG, chế độ này cũng là mặc định của nextjs, nhưng không call API trong getStaticProps mà dùng userEfffect hoặc useSwr để call phía client

D. Bonus

  • Hydration: Server đã render HTML, sau đó client dùng js attack các event vào html gọi là hydration