你知道嗎,當你跟朋友在討論 SSR 的時候,很有可能你們對 SSR 的認知其實是不一樣的。直接舉個例子,底下這幾種情境,你覺得哪些算是 SSR?
- 由後端 PHP 產生畫面
- 前端是 React 寫成的 SPA,但後端如果偵測到搜尋引擎,就會切換另一種 template,輸出專門針對搜尋引擎的模板,而非 React 渲染出的頁面
- 前端是 React 寫成的 SPA,但透過 Prerender 先把頁面 render 成 HTML,再交給搜尋引擎(一般使用者依然是 SPA),跟上一個的差別是使用者跟搜尋引擎看到的畫面基本上一致
- 前端是 React 寫成的 SPA,在後端用
renderToString
把 React 渲染成字串,但是沒有資料,資料會在前端拿 - 前端是 React 寫成的 SPA,後端會針對每個 page 先呼叫 API 拿資料,拿完以後才呼叫
renderToString
輸出 HTML,在 client 端時會做 hydration 讓頁面可以互動
有一種人認為只要是由後端產生出畫面,就叫做 SSR,所以 1 ~ 5 全部都是 SSR。也有一種人認為前端必須先是 SPA,此時搭配的後端才能叫做 SSR,所以 2~5 都是 SSR;而另一種人則認為 SSR 的重點是 hydration,所以只有 5(或是 45)是 SSR。