服務端渲染看這一篇就夠了(Next.js)

背景:

以前:沒有服務端渲染的概念,大規模應用之前,用戶請求網頁,都是後端先調用數據庫,獲得數據之後,將數據和頁面元素進行拼裝,組合成完整的 html 頁面,再直接返回給瀏覽器,以便用戶瀏覽,

優點:利於SEO,首屏快。

缺點:直接操作dom,性能差,代碼管理混亂,不適合大工程,開發兼顧前後臺,無法做到分工明確。  

     

現在:前後端分離,依賴於接口,並且單頁應用得到了廣泛應用(Angular、React、Vue 前端三大框架),後端專注於數據接口服務,前端專注接口調用,取得數據後渲染頁面,

優點:分工明確,工程清晰,易於維護,虛擬dom性能高,滿足日漸發展的前端需求。

缺點:不利於SEO(搜索引擎並不能收錄到 ajax 爬取數據之後然後再動態 js 渲染出來的頁面),首屏慢(單頁應用由於一次性將代碼發送給瀏覽器,代碼過大導致首屏慢)。

 

好了,現在前後端分離解決了以前的很多痛點,但他卻帶來了一些新的痛點,於是有人說,那前後端分離、單頁應用還不是雞肋。事實上,它重新帶來的痛點遠遠沒有傳統的痛點大,而且有很多項目對SEO和首屏的依賴性並不強,比如後臺管理系統,比如ERP等等,而且首屏渲染依然不是問題,有webpack等打包工具的按需加載之後,可以解決首屏慢的問題,那對於SEO依賴性強的項目是不是就沒法使用單頁應用了呢?答案是否定的,服務端渲染可以解決SEO問題,而且還能讓首屏更快

 

什麼是服務器端渲染?        

分工明確,工程浩大,前後端分離無疑是未來趨勢,但針對致命的SEO和和首屏慢,有何解決方法,服務端渲染由此而生、簡單理解是將組件或頁面通過服務器生成html字符串,再發送到瀏覽器,即數據和頁面在服務器端就已經被渲染成完整的html文檔,無需瀏覽器再通過接口訪問數據再渲染。進而解決SEO(頁面已經完整,爬蟲可以爬取到頁面所有內容),首屏慢(服務器端進行代碼分隔,按需加載,只給瀏覽器有需要的資源)的問題。

附:對“代碼分割、按需加載”的解釋:即首次訪問home,服務器只返回home頁面,與home頁面無關的資源不會加載,點擊跳轉路由至list,服務器返回list頁面,與list頁面無關的資源不會加載,此時該單頁應用就已經將home和list都發至瀏覽器了,再次路由切換訪問home時,不會發請求要home頁面,這就是服務器端渲染解決了單頁應用的致命問題,同時不影響單頁應用的用戶體驗。

 

單頁應用,使用的是客戶端渲染: 

其渲染流程如下:

1. 請求一個html

2. 服務端返回一個html  

3. 瀏覽器下載html裏面的js/css文件  

4. 等待js文件下載完成  

5. 等待js加載並初始化完成  

6. js代碼終於可以運行,由js代碼向後端請求數據( ajax/fetch )  

7. 等待後端數據返回  

8. 客戶端從無到完整地,把數據渲染爲響應頁面

計算一下:至少需要向服務器同步請求三次數據

 

而服務端渲染過程如下:

1. 請求一個html  

2. 服務端請求數據( 內網請求快 )  

3. 服務器初始渲染(服務端性能好,較快)  

4. 服務端返回已經有正確內容的頁面  

5. 客戶端請求js/css文件  

6. 等待js文件下載完成  

7. 等待js加載並初始化完成  

8. 客戶端把剩下一部分渲染完成( 內容小,渲染快 )

計算一下:一共至多需要向服務器同步請求兩次次數據

附:對同一個組件,服務端渲染“可視的”一部分( render/componentWillMount部分代碼 ),爲確保組件有完善的生命週期及事件處理,客戶端需要再次渲染。即:服務端渲染,實際上也是需要客戶端進行 再次地、但開銷很小的二次渲染。

 

服務端渲染之next.js?(next.js對應的是react,如果你只會Vue,請對應自行學習Nuxt.js)

Next.js是一套基於React的服務器端渲染框架。在React模塊化的基礎上,帶來以下幾點好處:

1、默認服務端渲染模式

2、代碼自動分隔使頁面加載更快

3、以文件系統爲基礎的客戶端路由

4、以webpack的熱替換爲基礎的開發環境

5、使用React的JSX和ES6的module,模塊化和維護更方便

6、可以運行在Express和其他Node.js的HTTP 服務器上

7、可以定製化專屬的babel和webpack配置

next.js詳細使用,請查看官方文檔:https://nextjs.frontendx.cn/

 

發佈了5 篇原創文章 · 獲贊 3 · 訪問量 2950
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章