前端架構之 JAMStack

blank

前端架構之 JAMStack

什麼是 JAMStack

JAMStack(JAM 代表 JavaScript,API 和 Markup)是一種使用 Static Site Generators (SSG) 技術、不依賴 Web Server 的前端架構。

它的核心是:不依賴 Web Server。

這看起來和把一個靜態網站部署到文件伺服器沒什麼區別。 我理解,JAMStack = 現代 SSG 框架 + DevOps + Serverless,是一種「究極」的前後端分離。

激進的說,「Static is the new dynamic」。

blank
一種有趣的比喻是:「CDN 優先應用程式」。

JAMStack 好在哪

  1. 高性能:由於網頁是靜態生成的,沒有額外的網路數據請求,它的 Time to first byte (TTFB)性能是最佳的(因為不涉及後端、資料庫等等)。
  2. 易部署:因為 JAMStack 不依賴 Web Server,部署就僅僅是把生成的網頁放到 CDN 就可以了。
  3. 強安全:同樣因為不依賴 Web Server 的原因,就導致 JAMStack 網站的攻擊面很小。
  4. 易開發:JAMStack 由於其特性,開發也極其簡單,不強依賴後端,開發、測試僅僅是部署到一個靜態檔伺服器即可。 現在「三大框架」都有相應的 SSG 方案,學習成本不高。

對比 Client Side Rendering(CSR),SSG 的 TTFB 有明顯的優勢;同時由於提前渲染,SEO 也更友好。

對比 Server Side Rendering(SSR),SSG 部署簡單,直接放到 CDN 即可,不依賴 Node Server 動態渲染。 TTFB 也優於 SSR。


Next.js 的作者之一 Guillermo Rauch 提到,由於 JAMStack 的易部署特性,給整個前端的開發測試流程帶了翻天覆地的變化:「The Deploy URL, the Center of Gravity」,即在開發、測試、驗收等等的流程中,核心是圍繞 URL。

  • UX 想看到現在開發的網頁效果,開發只需要部署到一個暫時的 URL,然後把它發給 UX 就可以了;
  • 多個 feature 分支,測試都可以在自己獨立的 URL 中即時看到效果;
  • E2E 測試、用戶測試也獨立在一個 URL 中;
  • 等等...
blank

如何實現 JAMStack

現在「三大框架」都有相應的 SSG 方案,既滿足了多樣化、複雜化的前端開發需要,又能簡單的生成靜態網頁:

  1. Next.js 是基於 React 的 SSR/SSG 框架。
  2. Scully 是基於 Angular 的 SSG 框架。
  3. VitePress 是 Vue 官方推出的 SSG 框架。

部署方面有 VervelNetlify騰訊雲雲開發等等。

Ledge 專案的實踐

Ledge(源自 know-ledge,意指承載物)知識平臺是基於我們所進行的一系列 DevOps 實踐、敏捷實踐、精益實踐提煉出來的知識體系。

Ledge 網站使用 Angular 開發。 作為一個類 Wiki 型的網站,它使用 Markdown 作為編寫內容的語言,使用 Ledge Framework 動態的將 Markdown 轉換為 HTML。 這就涉及到,如果轉換過程在瀏覽器進行,勢必導致性能的下降,和對 SEO 的影響。

所以我們選擇了 Scully 作為 SSG 框架,在 build 階段依據路由將內容提前轉換為 HTML 頁面:

blank
專案的開發部署流程

各方面性能都有了大幅提高:

blank
對比 JAMStack 和 CSR

What do you think?

Written by marketer

2020年提高Web前端開發技術需要知道的10個關鍵點

blank

如何使用 Angular Static Site Generator: Scully.io