BigPipe

BigPipe

動态網頁服務體系
BigPipe是一個重新設計的基礎動态網頁服務體系。[1]大體思路是,分解網頁成叫做Pagelets的小塊,然後通過Web服務器和浏覽器建立管道并管理他們在不同階段的運行。這是類似于大多數現代微處理器的流水線執行過程:多重指令管線通過不同的處理器執行單元,以達到性能的最佳。雖然BigPipe是對現有的服務網絡基礎過程的重新設計,但它卻不需要改變現有的網絡浏覽器或服務器,它完全使用PHP和JavaScript來實現。
    中文名:BigPipe 外文名: 别名: 性質:重新設計的基礎動态網頁服務體系 标記生成:Web服務器生成的響應的HTML标記 數據獲取:Web服務器從存儲層獲取數據

設計動機

為了更好的了解BigPipe,我們需要了解一下現有的動态Web服務系統,它的曆史可以追溯到萬維網的初期,但與初期相比卻并沒有多少改變。網站有着遠遠高于以前的動态效果和互動性,但傳統的網頁系統早已無法跟上互聯網速度的要求。

性能測試結果

下圖是傳統模式和BigPipe性能數據比較圖,數據是75%用戶對一個頁面中最重要的内容(例如:新聞動态被認為是在Facebook主頁上最重要的内容)的感知延遲時間。收集數據方式是加載Facebook主頁50次并且禁用浏覽器緩存。該圖顯示BigPipe使用戶在大多數浏覽器中感受到的延遲減少了一半。

工作原理

要利用該Web服務器和浏覽器之間的并行性,BigPipe首先分解網頁成多個可調用的Pagelets。正如流水線微處理器劃分一個指令的生命周期為(如“取指令”,“指令解碼”,“執行”,“寫回寄存器”等)多個階段,BigPipe的頁面生成過程分為以下幾個階段:

1.請求解析:Web服務器解析和完整性檢查的HTTP請求。

2.數據獲取:Web服務器從存儲層獲取數據。

3.标記生成:Web服務器生成的響應的HTML标記。

4.網絡傳輸:響應從Web服務器傳送到浏覽器。

5.CSS的下載:浏覽器下載網頁的CSS的要求。

6.DOM樹結構和CSS樣式:浏覽器構造的DOM文檔樹,然後應用它的CSS規則。

7.JavaScript中下載:浏覽器下載網頁中JavaScript引用的資源。

8.JavaScript執行:浏覽器的網頁執行JavaScript代碼。

前三個階段執行,由Web服務器,最後四個階段是由浏覽器執行。每個Pagelet必須經過所有這些階段順序,但BigPipe在不同的階段使幾個Pagelets同時執行。

在BigPipe,一個用戶請求的生命周期是這樣的:在浏覽器發送一個HTTP請求到Web服務器。在收到的HTTP請求,并在上面進行一些全面的檢查,網站服務器立即發回一個未關閉的HTML文件,其中包括一個HTML标簽和标簽的開始标簽。标簽包括BigPipe的JavaScript庫來解析Pagelet以後收到的答複。在标簽,有一個模闆,它指定了頁面的邏輯結構和Pagelets占位符。

在客戶端在收到Pagelet通過“onPageletArrive”發出的指令,BigPipe的JavaScript庫将首先下載它的CSS資源;在CSS資源被下載完成後,BigPipe将在Pagelet的标記HTML顯示它的innerHTML。多個Pagelets的CSS可在同一時間下載,它們可以根據其各自CSS的下載完成情況來确認顯示順序。

在BigPipe中,JavaScript資源的優先級低于CSS和頁面内容。因此,BigPipe不會在所有Pagelets顯示出來之前下載任何Pagelet中的JavaScript。然後,所有Pagelets的JavaScript異步下載。最後Pagelet的JavaScript初始化代碼根據其各自的下載完成情況來确定執行順序。

這種高度并行系統的最終結果是,多個Pageletsr的不同執行階段同時進行。例如,浏覽器可以正在下載三個PageletsCSS的資源,同時已經顯示另一Pagelet内容,與此同時,服務器也在生成新的Pagelet。從用戶的角度來看,頁面是逐步呈現的。最開始的網頁内容會更快的顯示,這大大減少了用戶的對頁面延時的感知。如果您要自己親眼看到區别,你可以嘗試以下連結:傳統模式和BigPipe。

第一個鍊接是傳統模式單一模式顯示頁面。第二個鍊接是BigPipe管道模式的頁面。如果您的浏覽器版本比較老,網速也很慢,浏覽器緩存不佳,哪麼兩頁之間的加截時間差别将更加明顯。

相關詞條

相關搜索

其它詞條