2020年已通過去了,可是有一項2020年的技術提案仍然值得研究,它就是React Server Component!沒錯,React團隊又出新活兒了,學不動的同窗能夠直接看本篇文章😸前端
已經有了SSR,爲何還會有React Server Component這種東西出現呢?它們倆的區別是什麼呢?react
要解釋這些問題,咱們先來看看Web渲染的發展歷程。web
遠古時期的前端代碼,都是夾雜在Php、Jsp、Asp的代碼中,而且整個頁面由服務器來查詢數據而且填充拼接,最終生成的是一個完整的HTML頁面,返回給瀏覽器能夠直接去解析展示,到如今有不少網站仍是這樣的模式,好比下圖這種:面試
隨着時間的發展,這種模式的問題也逐步凸顯。數據庫
從用戶體驗上來講,每次在頁面上點擊一個tab切換,都有多是返回一個完整的Html,瀏覽器會從新刷新一次,這種體驗是很難受的,由於有可能你在頁面上勾選了一些狀態會在刷新以後徹底消失掉,這會讓人感受不是在使用一個應用,而是在不一樣的幾個單獨頁面之間來回切換,使用體驗很是不流暢。後端
從開發體驗上來講,先後端的代碼、倉庫混在一塊兒,前端工程師急須要獨立的來作一些事情來提高開發體驗和用戶體驗,此時Ajax技術出現了。瀏覽器
隨着Ajax技術的普遍應用以及Vue、React、Angular等等技術的出現,前端單頁應用愈來愈被前端工程師所接受。此時幾乎全部的拉取數據、組裝Html、渲染頁面的工做都放到了前端來作,服務端的職責收斂到API請求來執行業務邏輯和獲取數據,先後端的職責分明,分別把持網站的兩頭,中間是Http請求把他們串起來。服務器
可是這種單頁面應用的純前端渲染也帶來了一些問題,由於在首次請求的時候,服務器端只會返回一個幾乎爲空的Html(以下圖),後續的內容數據都靠Ajax去動態的獲取,若是要請求的數據不少的話,就會產生白屏,而且會有SEO問題。並且隨着前端工程的膨脹,打包後的代碼體積也會愈來愈大。微信
爲了解決首次訪問白屏問題以及SEO問題,你們把目光轉向了SSR(服務端渲染),React社區推出了Next.js,Vue社區推出了Nuxt.js,它們都是在首次訪問某頁面時,直接在服務器端拼裝一個完整的Html。網絡
單頁應用+部分頁面SSR就是完美的方案嗎?確定不是的。作技術的都知道每種方案只是符合某些條件下的特定場景而已,隨着業務複雜度上升以及技術債的堆積,SSR的問題也凸顯出來,若是一個頁面請求的接口不少,那麼這個頁面在服務端就會花費很長的時間才能拼裝完成,那麼響應時間依然過長。並且搞過SSR的同窗都知道,這裏面踩坑也很多。
到目前爲止,咱們已經清晰的知道前端開發的痛點了:
對於權衡這3個痛點,React團隊給出的解決辦法是React Server Component,它可讓你:
而且它和SSR的區別在於:
以React官方給的介紹視頻爲例,假若有這麼一個常見的業務需求,1個父組件內套了2個子組件,而且每一個子組件須要的數據不同:
爲了儘可能的少發請求,咱們通常會用1個接口去拿到2份兒數據:
可是這樣子作的問題是,2個子組件與父組件耦合太嚴重,不利於維護,因而咱們選擇在2個子組件內各自請求數據:
可是這樣子作相比上一種作法,多了2次接口請求,性能上會受影響,使用React Server Component重構來作就會是這樣:
組件的業務數據拉取放在了服務端來作,而且服務端組件不會被打包到前端代碼中,對於前端來講,整個網絡請求只有一次。
React團隊提出的這項技術,社區也有過相似的,但此次不一樣的是它是基於React技術棧來作的,因此關注度和接受程度會比其餘相似的技術更高一些。
從前端開發者角度來講,這項技術把Component的能力從前端擴展到了後端,之後說不定各大公司會出現前端組件公共服務之類的技術基建,可能會在之後改變現有的前端開發模式。
總之,值得期待。
微信關注公衆號「 前端耳東 」,每週持續更新文章,分享前端深度技術和職場經驗,對你們前端進階、面試找工做都有幫助。