所謂的服務端渲染是單指用node.js實現的模板,還是包括以前jsp,asp這些技術呢?


服務端渲染:凡是是從伺服器返回的html頁面,均算作是服務端渲染,包括php,jsp,nodejs。

至於現在為什麼使用nodejs,很大一部分原因是,nodejs的本質也是js,那麼就可以達到「一次編寫,前後端共用」的目的,就是實現同構直出的渲染。例如用node+react實現的方案,虛擬dom在服務端生成html進行渲染,而前端則使用相同的虛擬dom和服務端傳過來的數據,進行事件的掛載。

可以看下這篇文章瞭解一下:

騰訊新聞搶金達人活動node同構直出渲染方案的總結-蚊子-前端博客?

www.xiabingbao.com圖標


就是你理解的只要是伺服器返回 HTML 源碼就是服務端渲染。


SSR (服務端渲染)是一種在關注何處渲染 HTML 頁面的模式,代表在伺服器端完成把數據和模板轉換成最終的 HTML ,區別於 CSR(客戶端渲染),後者是在客戶端完成

SSR 實際上並沒有限定語言和框架

  • 傳統的 PHP,jsp,asp 的模板渲染也是服務端渲染
  • Node JS 領域,包含了 React 或者 Vue 這種前後端同構 的模式
  • 也 包含了 Express / Koa / Egg 等基於模板渲染的 模式


  1. 字面意思上,包含 php、asp 等
  2. 實際上,目前基本特指 SPA 的伺服器端預渲染


簡單理解是將組件或頁面通過伺服器生成html字元串,再發送到瀏覽器,最後將靜態標記"


就是頁面呈現出來的效果代碼 是通過你介面獲取到的。一般這種方案是為瞭解決白屏的問題。


顧名思義,就是服務端生成html的過程,區別於以往的jsp和asp直出頁面,由於ajax的普及,前端更多時候是由js發起網路請求來非同步獲取數據,並以某種方式將數據組織成為頁面或者頁面的某部分,最終呈現出完整用戶界面,這樣的效率更高,性能也更好,可維護性也大大提高,此時的html只充當了模板/容器作用,並沒有實際內容。

但是因為搜索引擎只能收錄靜態頁面,也就是隻能抓取你的html而不執行你的js,這時候就會導致你的內容沒有被收錄,特別是對一些CMS的影響特別大,如果想要對搜索引擎友好,我們還是需要服務端直出頁面的能力。

那麼我們有沒有可能同時滿足開發需求又滿足爬蟲需求呢?有的,這就是服務端渲染,現在的服務端渲染區別於以前的jsp/asp,後者是模板引擎主要方便數據輸出到頁面,前者更像是一個解析引擎,你可以理解為在服務端跑了一個瀏覽器,解析你的html和js,最後得到完整頁面。當有訪問的時候,先經過解析器渲染出完整頁面,再丟給訪問者。

這樣看來效率似乎比較低,但事實上我們只需要針對搜索引擎的ua執行伺服器渲染,其他情況按照原來的方式進行就可以了。本來這個需求也是因為SEO需要而已。


把「服務端渲染(SSR)」和「客戶端渲染(CSR)」放在一起理解一目瞭然:

服務端渲染(SSR):頁面上的內容是由伺服器上的代碼決定的。

即,頁面上的內容在伺服器上已經生成好了,伺服器把這個內容給到瀏覽器,瀏覽器拿到這個內容直接顯示在頁面上即可。

客戶端渲染(CSR):一個網頁是由 JS 文件渲染出來的,而不是伺服器直接返回回來的。

這些都是「Web 前端開發」的基礎知識,你完全可以,也應該瞭解得更多!

① 比如,寫一個靜態頁面所需的方方面面的知識:

搞定「試讀文章」,拿下市面上任意主流「靜態頁面」!?

mp.weixin.qq.com圖標

② 以及,「Web 前端開發」方方面面的知識:從零基礎到輕鬆就業 | 300+ 篇「Web 前端開發」技術文章等著你~?

mp.weixin.qq.com圖標

③ 還有,「前端面試」方方面面的知識:前端一萬小時:2021 前端面試 | 「HTML + CSS + JS」專題?

zhuanlan.zhihu.com圖標前端一萬小時:2021 前端面試 | Vue.js 專題?

zhuanlan.zhihu.com圖標前端一萬小時:2021 前端面試 | React.js 專題?

zhuanlan.zhihu.com圖標

廣義的說,只要是在伺服器端生成完整的html的方式,都可以算作伺服器端渲染。

只是這種說法,在前後端完全分離之前,似乎也沒人提及。因為很普遍嘛。

後來前後端完全分離了,完整的html是在前端生成,後端不管了。於是產生一個小問題,搜索引擎不識別!

如果項目還必須支持SEO,那麼怎麼辦?寫兩套代碼?還是放棄前後端分離的方案?

於是前後端分離的方案裡面,出現了一種「後端渲染」的技術方案。

你用前後端分離的方式做項目,一般情況下完整的html是由前端實現,特殊情況(比如支持SEO或者加快首頁顯示速度)下可以由後端實現。

基本就是這樣。


傳統的web開發方式就是服務端渲染,前端一開始僅僅是畫頁面而已,然後給後端套數據


JSP,ASP ,SMARTY等等是JAVA、C#、PHP等人員用的伺服器渲染模板。前端用的就是node


廣義上的服務端渲染就是一個網頁的內容來自服務端,客戶端即使不支持js也能正常顯示。 但我相信題主問的一定不是那些上古文物。

現在狹義上的服務端渲染(SSR)是指類似React這樣的框架,由後端渲染成HTML字元串,數據也是後端自己讀取的(比如資料庫)。但是輸出的又不僅僅是靜態的字元串,而是頁面首次渲染後立即「冷凍」起來。客戶端接收後先當成靜態頁面顯示,然後「解凍」,激活後的頁面裏React繼續運行,之後就和普通的React項目沒什麼區別了。

用途上,有人為了SEO,有人為了避免打開時白屏等待,有人為了用戶的手機減負,有人為了載入數據方便。但顯然SSR不是銀彈。

典型的場景是用在以內容展示為主的項目上,例如新聞網。用戶可能來自搜索引擎,看一眼新聞內容就關了,這個時候當然是越快顯示越好。也有用戶看完不關,繼續瀏覽其它內容,這時候客戶端React就開始發揮作用了。


  • 服務端渲染要結合客戶端渲染一起理解會更簡單。目前談服務端渲染一般是指BS架構的服務端,其中瀏覽器Browser作為客戶端。伺服器與瀏覽器的UI的數據交互協議主要是html,無論是Nodejs,Python,Go,Ruby,Java,PHP等各種技術棧中的web框架或者你直接手擼http框架手響應返回html數據。凡在服務端處理數據,將數據處理為html返回的都可以理解為服務端渲染。Html的處理在瀏覽器通過腳本或者其他方式組織渲染,可以理解為客戶端渲染
  • 發散一下 如果UI展示協議數據是由Server直接處理完成,可以認為是服務端渲染。如果展示協議數據是由客戶端處理完成,則可以認為是客戶端渲染。二者可以同時在應用中出現,不是非此即彼的關係。 這裡的客戶端不一定是瀏覽器,可以是任意處理約定協議的應用。
  • 示例 用JSON數據約定一套最簡單的展示協議,只展示一個Hello World {body:hello word},然後無論是在windows或者移動平臺下開發最簡單的客戶端,獲取數據解析這個數據展示。 如果這個{body:hello world}直接由服務端直接返回,則是服務端渲染。如果,服務端只返回hello world數據,這個JSON數據由客戶端組織完成則是客戶端渲染。


推薦閱讀:
相關文章