內容整理自多個論壇博客。
主要參考:https://www.jianshu.com/p/b8cfa496b7ec
https://www.jianshu.com/p/10b6074d772c
https://www.douban.com/note/722996691/
客戶端渲染(CSR)VS服務端渲染(SSR)
1.客戶端渲染和服務端渲染
1.1 概念
客戶端渲染:后端不提供完整的html頁面,而是提供一些api使得前端可以獲取json數據,然后前端拿到json數據之后再在前端進行html頁面拼接,然后展示在瀏覽器上。這種是客戶端渲染。這樣前端就可以專注UI的開發,后端專注邏輯開發。
服務端渲染:在互聯網早期,前端頁面都是一些簡單的頁面,那么前端頁面都是后端將html拼接好,然后將它返回給前端完整的html文件。瀏覽器拿到這個html文件之后就可以直接顯示了,這就是我們所謂的服務器端渲染。
1.2 兩者本質區別
客戶端渲染和服務器端渲染的最重要的區別就是究竟是誰來完成html文件的完整拼接,如果是在服務器端完成的,然后返回給客戶端,就是服務器端渲染,而如果是前端做了更多的工作完成了html的拼接,則就是客戶端渲染。
1.3 優缺點分析
客戶端渲染的優點:網絡傳輸數據量小、減少了服務器壓力、前后端分離、局部刷新,無需每次請求完整頁面、交互好可實現各種效果。
客戶端渲染的缺點:不利於SEO、爬蟲看不到完整的程序源碼、首屏渲染慢(渲染前需要下載一堆js和css等)。
服務端渲染的優點:首屏渲染快、利於SEO、可以生成緩存片段,生成靜態化文件、節能(對比客戶端渲染的耗電)。
服務端渲染的缺點:用戶體驗較差、不容易維護,通常前端改了部分html或者css,后端也需要修改。
1.4 什么情況下使用服務端渲染
我們知道,服務端渲染其實就是由瀏覽器做的一些事情,我們放到了服務端去做
,那么對於掘金、簡書、CSDN、知乎等網站的搭建,這種在網上一搜搜出一堆東西的網站,SEO做的很好,應該多少都用到服務端渲染了吧?當然,做服務端渲染成本是高昂的。vue全家桶或者react全家桶,都是推薦通過服務端渲染來實現路由的。服務端渲染並非完全之策(服務器稀少而寶貴),關於首屏渲染體驗以及SEO的優化方案很多,在不使用服務端渲染這個操作下,我們最好的處理方式就是找尋替代優化方案。
擴展:事實上,很多網站是出於效益考慮才啟用服務端渲染,性能在其次。