亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

淺談React前后端同構防止重復渲染

2019-11-19 14:35:18
字體:
來源:轉載
供稿:網友

什么叫前后端同構?

為了解決某些問題(比如SEO、提升渲染速度等)react 提供了2個方法在服務端生成一個HTML文本格式的字符串。在得到了這個HTML格式的字符串之后,通常會將其組裝成一個頁面直接返回給用戶的瀏覽器。

到這里,服務端的活已經干完了,然后就是瀏覽器這邊干活。

瀏覽器拿到HTML文本后,立刻進行渲染將內容呈現給用戶。然后加載頁面所需的 .js 文件,然后執行 JavaScript 腳本,然后開始初始化 react 組件…………

到這里問題就來了。react 初始化組件后會執行組件內所有 render () 方法,然后生成虛擬DOM的樹形結構,然后在適當的時候將虛擬dom寫到瀏覽器的真實dom中。因為 react 總是根據虛擬dom來生成真實dom,所以最后會把服務器端渲染好的HTML全部替換掉。

上面這個事情說不是問題確實也不是問題,無非就是用戶看到頁面然后“閃現”一下。說是問題還真是個問題,產品會拿著這毛病從用戶體驗的角度在各種場合和你死磕半個月??睦哿四闼餍园逊斩虽秩娟P了,然后運營又拿著SEO的問題準備和你開始撕逼了。

聰明如 Facebook 的工程師當然想到了這些問題,所以他們在ReactDOMServer.renderToString(element) 方法中提供了一個 checksum 機制。

關于 checksum 官網 并沒有太多介紹,但是國內外的各路博客介紹了不少。我一直想找 react 開發者關于這個機制的介紹一直沒找到……。

前后端同構就是保證前端和后端的dom結構一致,不會發生重復渲染。react 使用 checksum 機制進行保障。

什么叫React首屏渲染?

簡單的說就是 react 在瀏覽器內存中第一次生成的虛擬 dom 樹。切記是虛擬 dom ,而不是瀏覽器的dom。

了解 react 的應該知道,所有 react 組件都有一個 render() 方法(如果使用function方式編寫的組件會把function里的所有代碼都塞到 render() 方法中去)。當ReactDOM.render( element, container, [callback] )方法執行時,會執行以下步驟:

  1. 所有組件的會先進行初始化(es6執行構造函數)。
  2. 所有組件的 render () 方法會被調用一次,完成這個過程后會得到一顆虛擬的 dom 樹。
  3.  react 會將虛擬dom轉換成瀏覽器dom,完成后調用組件的 componentDidMount() 方法告訴你已經裝載到瀏覽器上了。

在上面這個過程成中,步驟2完成后即為完成 react 的首屏渲染。結合 checksum 機制步驟3有可能不會執行。

當組件狀態發生變更時( setState() 生命周期函數被調用)或者 父組件渲染時(父組件的 render() 方法被調用),當前組件的 render() 方法都會被執行,都有可能會導致虛擬dom變更,但是這些變更和首屏渲染沒任何關系了。

React前后端同構首屏渲染

了解了同構和首屏渲染,就好理解如何解決首屏不重復渲染的問題了。

首先服務端渲染完之后會有一個 checksum 值寫在根元素的屬性上:

這個 checksum 是根據服務端生成的HTML內容哈希計算得到的。

然后在瀏覽器加載完所有的js文件之后,開始執行前面介紹的 ReactDOM.render( element, container, [callback] )  初始化渲染的三個步驟。當執行完第二步生成虛擬dom后,react 會根虛擬dom用相同的算法計算一個哈希值,如果和 checksum 一致則認為服務器已經完成渲染,不會再執行第三步。

如果 checksum 比對不一致,在 開發環境 和 測試環境 會在瀏覽器console中輸出以下警告內容:

生產環境不會輸出任何警告。

同構渲染的內容就這么多,原理其實蠻簡單的,無非就是保證DOM一致。但是結合代碼分片、異步加載、服務端調接口異步組裝數據等等功能后,如何保證服務端和瀏覽器端第一次渲染的dom一致還得花不少功夫。不過原理清楚了,事情總能辦成。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美色欧美亚洲高清在线视频| 精品亚洲一区二区三区在线播放| 国产精品99免视看9| 色偷偷噜噜噜亚洲男人的天堂| 日本欧美国产在线| 精品欧美一区二区三区| 欧美电影免费观看大全| 久久躁狠狠躁夜夜爽| 中文字幕久久久av一区| 富二代精品短视频| 日韩av电影在线免费播放| 国产99在线|中文| 成人免费网视频| 久久久精品免费视频| 久久99国产综合精品女同| 欧美国产第二页| 国产九九精品视频| 97色在线观看| 夜夜嗨av一区二区三区四区| 欧美一区二粉嫩精品国产一线天| 97超级碰在线看视频免费在线看| 亚洲精品电影在线| 欧美一区二区三区免费观看| 欧美激情免费视频| 精品国产拍在线观看| 日韩**中文字幕毛片| 亚洲第一福利在线观看| 日韩免费精品视频| 欧美成人午夜激情在线| 久久成人综合视频| 日韩电影免费观看在线观看| 性欧美视频videos6一9| 国产91对白在线播放| 欧美日韩成人在线视频| 亚洲在线一区二区| 亚洲理论电影网| 成人乱人伦精品视频在线观看| 97不卡在线视频| 欧美孕妇毛茸茸xxxx| 久热国产精品视频| 7m精品福利视频导航| 欧美视频免费在线| 亚洲成人网在线| 国产成人一区二区在线| 欧美做受高潮电影o| 亚洲欧美精品伊人久久| 亚洲成人1234| 国产91色在线|| 国产91av在线| 国产精品观看在线亚洲人成网| 亚洲白拍色综合图区| 美乳少妇欧美精品| 欧美极品少妇xxxxⅹ免费视频| 亚洲影影院av| 成人黄色av播放免费| 国产亚洲精品久久| 日韩久久精品电影| 欧美疯狂性受xxxxx另类| 亚洲国产黄色片| 国产91久久婷婷一区二区| 综合网日日天干夜夜久久| 成人精品福利视频| 国产精品久久久久久久久久| 久久精视频免费在线久久完整在线看| 日韩在线视频中文字幕| 欧美日本亚洲视频| 最新国产精品拍自在线播放| 日韩精品久久久久久福利| 欧美激情第三页| 日韩高清电影免费观看完整版| 欧美成人午夜激情在线| 激情成人中文字幕| 91久久精品久久国产性色也91| 欧美激情一区二区三级高清视频| 亚洲国产成人精品一区二区| 亚洲第一偷拍网| 欧美极品少妇全裸体| 亚洲aⅴ日韩av电影在线观看| 成人免费高清完整版在线观看| 成人h猎奇视频网站| 日韩免费电影在线观看| 国产精品第1页| 久久久久久网址| 成人福利在线观看| 久久久精品视频在线观看| 国产精品永久免费视频| 青青草国产精品一区二区| 欧美天天综合色影久久精品| 草民午夜欧美限制a级福利片| 4p变态网欧美系列| 日韩欧美综合在线视频| 永久免费毛片在线播放不卡| 成人免费午夜电影| 国产噜噜噜噜噜久久久久久久久| 一区二区成人av| 欧美一区在线直播| 欧美极品在线播放| 欧美一区二区视频97| 在线视频中文亚洲| 欧美成人免费网| 色综合男人天堂| 国产福利精品视频| 日韩极品精品视频免费观看| 性欧美xxxx视频在线观看| 国产精品视频自在线| 26uuu日韩精品一区二区| 日韩欧美亚洲成人| 亚洲男人天天操| 亚洲天堂色网站| 久久亚洲国产精品成人av秋霞| 亚洲片在线观看| 成人写真福利网| 国产91色在线|| 黄色一区二区在线| 亚洲综合大片69999| 欧美日韩另类字幕中文| 精品成人69xx.xyz| 欧美日韩国产精品专区| 欧美黄色性视频| 午夜精品一区二区三区在线播放| 91av视频导航| 亚洲欧美一区二区激情| 日韩精品久久久久久久玫瑰园| 欧美交受高潮1| 永久免费看mv网站入口亚洲| 深夜福利亚洲导航| 亚洲r级在线观看| 狠狠躁夜夜躁人人爽天天天天97| 国产精品高潮呻吟久久av无限| 一区二区三区日韩在线| 亚洲一区二区三区香蕉| 中文字幕日本欧美| 国产成人精品在线视频| 91在线精品视频| 日韩中文字幕在线| 国产精品国内视频| 播播国产欧美激情| 日韩精品免费一线在线观看| 日韩美女av在线免费观看| 日韩免费观看在线观看| 国产亚洲精品久久久久久777| 九九精品视频在线| 97不卡在线视频| 日韩中文综合网| 欧美日韩国产一中文字不卡| 精品国产91乱高清在线观看| 亚洲欧美日本伦理| 精品国产91乱高清在线观看| 疯狂做受xxxx高潮欧美日本| 国产精品久久av| 欧美日韩国产综合新一区| 久久伊人免费视频| 日韩免费不卡av| 亚洲精品久久久久久久久久久久| 欧美日韩成人黄色| 亚洲成色999久久网站| 97av在线视频| 国产精品日韩在线观看| 欧美另类在线观看| 欧美黑人狂野猛交老妇| 国产精品欧美在线| 日韩高清不卡av| 日本精品一区二区三区在线播放视频| 91色视频在线观看|