Static site generator là gì

Trong bài này chúng ta sẽ so sánh Server side rendering vs Client side rendering vs Pre rendering vs Dynamic Rendring. Giữa công nghệ mới và công nghệ cũ bạn sẽ chọn cái nào.

Hiện nay đã là 2021, công nghệ web đã thay đổi chóng mặt và bạn sẽ xoắn hết cả não khi mình sẽ kể những công nghệ render web hiện nay:

  1. Server Side Redering [SSR]
  2. Client Side Rendering [CSR]
  3. Pre-Rendering: Static Site Generation [SSG] và Server Side Rendering [Universal SSR]
  4. Dynamic Rendering

1. Server Side Rendering

Server Side Sendering [SSR] là cơ chế được dùng từ rất lâu, đa số xử lý logic sẽ nằm ở phía server. Server sẽ xử lý và thao tác với databse để render ra HTML gửi về cho client. Browser ở client chỉ cần hiển thị HTML ra cho người dùng.

Đặc điểm của Server Side Rendering

  • Xử lý logic và Render HTML tại server
  • Routing chuyển trang tại server

Ưu điểm của Server Side Sendering

Dù ra đời lâu rồi nhưng Server Side Rendering vẫn có nhiều ưu điểm mà nhiều cơ chế khác không có như:

  • Load lần đầu tiên nhanh, caching hay CDN dễ dàng
  • Thân thiện với SEO vì bot như google, bing dễ đọc được trang web dưới dạng html
  • Tương thích nhiều trình duyệt trên nhiều thiết bị vì logic Javascript

Nhược điểm

  • Vì xử lý logic nhiều tại server => server dễ bị quá tải và chậm
  • Chuyển trang là phải load lại toàn bộ trang web => gây khó chịu về mặt UI/UX cũng như tốn băng thông

Ai đang dùng Server Side Rendering

Nhiều website đứng top đầu về truy cập tại Việt Nam vẫn đang dùng SSR như:

2. Client Side Rendering

Client Side Rendering [CSR] là những trang web mà HTML, CSS sẽ được render ở trên trình duyệt.

Đặc điểm của Client Side Rendering

  • Xử lý logic đơn giản và render HTML, CSS sẽ nằm ở Client.
  • Logic phức tạp liên quan đến bảo mật và database vẫn nằm ở server
  • Chuyển trang tại client

**Ưu điểm của Client Side Rendering

  • Logic được chuyển bớt cho client => Server được giảm tải
  • Page load một lần duy nhất. Các lần chuyển trang sau không cần load lại page => mượt, nhanh, tốt về mặt UI/UX
  • Băng thông được giảm tải vì server chỉ cần gửi JSON

Nhược điểm của Client Side Rendering

  • Lần lần đầu khá chậm vì client phải tải 1 cục Javascript về, sau đó chạy JS để DOM và gọi API, rồi mới render ra HTML.
  • Không thân thiện SEO, mặc dù ngày nay

Công nghệ hỗ trợ CSR: React, VueJs, Angular, Svelte…

Những công ty nào đang dùng Client Side Rendering?

Mạng xã hội: Facebook, Instagram, WhatsApp, Twitter

Giải trí: Netflix

Forum: Reddit

3. Pre-Rendering

Pre-Rendering là công nghệ mới nhất về render web hiện nay. Website sẽ được render ra HTML trước khi gửi về cho client [khá giống SSR]. Vì ra sau cùng nên Pre-Rendering khắc phục được các nhược điểm của các công nghệ như SSR hay CSR. Hiện nay có 2 loại Pre-Rendering đó là: Static Site Generation và Server Side Rendering [hay còn gọi là Universal].

Static Site Generation là gì

Static Site Generation [SSG] là website được render ra html trong quá trình build, vì thế html sẵn sàng được dùng cho mỗi request.

Đại diện cho SSG là các công nghệ như GatsbyJs, VueExpess, Hugo, NuxtJs, NextJs…

Ai đang dùng Static Site Generation? Trang chủ React, Airbnb Engineering & Data Science, Shoptify.Design

Ưu điểm Static Site Generation

  • Siêu nhanh [ cả về tốc độ develop lẫn tốc độ của trang web].
  • Tiết kiệm chi phí server vì ít dùng tài nguyên.
  • Thân thiện SEO.

Nhược điểm Static Site Generation

  • Website không linh động, nội dung sẽ trở nên lỗi thời nếu thay đổi quá thường xuyên vì là web tĩnh [có thể dùng Ajax để xử lý dữ liệu động nhưng nó sẽ không được cache cũng như không thân thiện SEO]
  • Khả năng mở rộng không tốt vì mỗi lần cập nhật dữ liệu là phải qua quá trình build tốn khá nhiều thời gian.
  • Thời gian build tăng lên dựa vào size của project
  • Mình đã có bài đánh giá chi tiết GatsbyJs, mọi người có thể đọc để hiểu thêm về Static Site Generation.

Server Side Rendering [Universal SSR]

Đây là kĩ thuật kết hợp giữa Client Side Rendering và Server Side Rendering truyền thống. Khi request lần đầu tiên, server sẽ gọi API và render HTML, CSS, JS gửi về cho client [giống SSR]. Ở các lần request tiếp theo thì client sẽ tự gọi API và render tại client [ giống CSR].

ều này đem lại sự linh hoạt và khắc phục các nhược điểm của CSR và SSR. Giúp website vừa có thể cân bằng tải server vừa có thể SEO tốt.

Ví dụ những framework cho phép SSR: NextJs và NuxtJs

Ưu điểm Universal SSR

  • Nội dung được cập nhật thường xuyên
  • Site load nhanh vì được render tại server trước khi gửi về cho client
  • Tối ưu SEO và trải nghiệm người dùng

Nhược điểm Universal SSR

  • Không thể deploy đến một static hosting.
  • Gọi API và render tại server.

4. Dynamic Rendering

Dynamic Rendering hay còn gọi là kết xuất động, một kĩ thuật cung cấp HTML phù hợp tùy thuộc vào đối tượng request. Cụ thể là nếu đối tượng request là Browser thì server sẽ trả về một phiên bản SPA, còn nếu là bot như Google, Bing thì server sẽ trả về html đã được render tại server để phục vụ cho crawler. Điều này giải quyết được vấn đề muôn thuở của CSR là SEO.

Một số trình kết xuất động phổ biến là Puppeteer, Rendertron và prerender.io

Cùng xem Google nói về sự quan trọng của dynamic rendering cho Javascript SEO

Ai đang dùng Dynamic Rendering ?

Mình có check soure của Shopee thì họ dùng React cho client, nhưng lại có khả năng SEO rất tốt. Nên rất có thể họ dùng Dynamic Rendering.

Ưu điểm Dynamic Rendering:

  • Không cần phải thay đổi lại source code của Client Side Rendering
  • Hỗ trợ SEO
  • Vẫn giữ được những ưu điểm của Client Side Rendering

Nhược điểm Dynamic Rendering:

  • Cần một service riêng để chạy
  • Khó khăn cho nhà phát triển vì cần phải làm chủ được kĩ thuật này.

Tóm lại

Không có gì là hoàn hảo tuyệt đối, sự lựa chọn là ở bạn tùy thuộc vào business dự án. Với mình, mình thích những công nghệ mới nên mình vẫn thích SSR Universal và Dynamic Rendering hơn. Cám ơn các bạn đã đọc đến đây, have nice day 😛

Photo by Safar Safarov on Unsplash

Bạn đã từng nghe nói về Single Page Applications , hoặc Static Generated Site, vậy các định nghĩa đó có nghĩa như thế nào? Khi phát triển ứng dụng web bạn nên sử dụng loại nào?

Nguồn:

Single Page Application [SPA]

Nguồn: //www.wavemaker.com/learn/app-development/ui-design/page-concepts/

Xưa kia khi các trình duyệt không được ban cho nhiều khả năng, performance như hiện nay, hay ngôn ngữ javascript chưa được phát triển cực mạnh như bây giờ. Hay chính xác hơn là khi Google’s V8 Javascript chưa ra đời. Thành ra khi bạn sử dụng 1 website nào đó và click bất kể thứ gì đều gọi request đến server và sau đó browser lại load lại trang mới.

Giờ đây khi mọi thứ đều tân tiến và phát triển mạnh mẽ, các frontend framework hiện đại ra đời như React.js, Vuejs,…các website thường phát triển theo hướng vòng đời của một SPA. Có nghĩa bạn chỉ cần load 1 lần [HTML, CSS, Javascript] và khi click bất kể thứ gì thì lúc đó bạn đang tương tác chính dưới client. Thay vì phải gọi request đến server và reload lại nguyên page, giờ server chỉ trả về data dưới dạng JSON và chỉ reload lại một vài component cần thiết

Một vài trang web nổi tiếng sử dụng SPA có thể kể đến:

  • Gmail
  • Google Maps
  • Facebook
  • Twitter
  • Google Drive

Ưu điểm

  • Giúp user cảm nhận việc sử dụng website nhanh hơn, thay vì đợi client-server giao tiếp và load lại nguyên page thì giờ chỉ cần đợi browser load lại 1 phần components.
  • Với cách server trả data dạng JSON, phía server sẽ giảm được bớt tài nguyên. Vì chỉ cần tập trung vào các API thay vì xây đựng lại layout kiểu server-side render.
  • Khi server xây dựng các API cho website, chúng ta có thể tận dụng để build các ứng dụng mobile mà không cần phải viết thêm mới.
  • SPA hỗ trợ cho Progressive Web Apps, user có thể sử dụng website mà không cần online [kết nối mạng]
  • SPA chia dự án thành 2 đội, backend lo cho việc phát triển các API và đội frontend lo cho việc phát triển UI UX. Chính sự gia tăng SPA trong phát triển website nên vài năm gần đây các tuyển dụng về frontend developer khá nhiều.
  • SEO, kỹ thuật này đang được Google phát triển cho các ứng dụng, website theo kiểu SPA, tuy nhiên đến giờ vẫn còn khá nhiều vấn đề cho việc đánh index site so với các website truyền thống [server-render page].
  • Khi phát triển với SPA điều đó có nghĩa bạn đang làm việc với hàng tá đoạn code Javascript. Và nếu bạn quản lý và code không kỹ càng thì có thể dẫn đến tình trạng memory leak cho browser.

Để nói đến khái niệm này, trước tiên cần đi sơ qua về cách hoạt động của một dynamic CMS, cụ thể là wordpress.

Khi user đến 1 trang web wordpress, 1 request sẽ được gởi về server [Nginx]. Server thực hiện truy vấn các templates, content, site, data,… từ database và gửi một trang html hoàn chỉnh cho client.

Cách này giống với vòng đời của các website truyền thống được mô tả ở trên.

Bây giờ thì static site generator hoạt động ra sao?

Khi build project lên server nó sẽ tạo ra các file sẵn cho toàn bộ website [page, post, content, …] mà không có tương tác đến database

Source: //d1qmdf3vop2l07.cloudfront.net/quiet-lily.cloudvent.net/compressed/ac88548cb0c955ba3f21d06b34647a83.png

Khi user request 1 page nào đó trên website, sẽ gửi request về phía server, và server chỉ việc tìm file tương ứng đã được generated trước đó và gửi về lại user.

Đến đây có thể thấy được việc request với static site generator nhanh đến chừng nào rồi.

Ưu điểm

Server chỉ việc trả về 1 file đã được sinh ra từ trước mà không cần query phức tạp. Ứng dụng khi deploy lên server có thể được tinh chỉnh lại như minifiers các file css, js, các file hình ảnh. Sử dụng tool để remove các css không dùng, các comment, …

Chỉ có các file được sinh ra tồn tại trên server, không có các dữ liểu trong database.

Các file được sinh ra sẵn này thường được tracked bởi các SCM như git,… Cho phép nhiều người có thể làm việc trên 1 project hoặc undo những thay đổi,….

Nhược điểm

  • Real time data là không thể
  • Không có giao diện viết bài như các CMS. Mỗi lần muốn tạo 1 bài viết mới bạn phải viết dưới client cho đến khi muốn publish và phải deploy lại lên server
  • Tương tác user là không có, ví dụ như comment một bài viết chẳng hạn

Server side render + Single Page Application = Universal App

Video liên quan

Chủ Đề