技術(shù)資訊
網(wǎng)頁加載速度研究
2012-08-26 17:36:20
BigPipe是一個重新設(shè)計的基礎(chǔ)動態(tài)網(wǎng)頁服務(wù)體系。大體思路是,分解網(wǎng)頁成叫做Pagelets的小塊,然后通過Web服務(wù)器和瀏覽器建立管道并管理他們在不同階段的運行。這是類似于大多數(shù)現(xiàn)代微處理器的流水線執(zhí)行過程:多重指令管線通過不同的處理器執(zhí)行單元,以達(dá)到性能的最佳。雖然BigPipe是對現(xiàn)有的服務(wù)網(wǎng)絡(luò)基礎(chǔ)過程的重新設(shè)計,但它卻不需要改變現(xiàn)有的網(wǎng)絡(luò)瀏覽器或服務(wù)器,它完全使用PHP和JavaScript來實現(xiàn)。
Facebook的網(wǎng)站速度做為最關(guān)鍵的公司任務(wù)之一。在2009年,F(xiàn)acebook成功地實現(xiàn)了網(wǎng)站速度提升兩倍 。而正是我們的工程師團(tuán)隊的幾個關(guān)鍵的創(chuàng)新使它成為可能。在本文中,我將向大家介紹我們的秘密武器之一,我們稱之為BigPipe的偉大底層技術(shù)。
動機(jī)
為了更好的了解BigPipe,我們需要了解一下現(xiàn)有的動態(tài)Web服務(wù)系統(tǒng),它的歷史可以追溯到萬維網(wǎng)的初期,但現(xiàn)在與初期相比卻并沒有多少改變?,F(xiàn)代網(wǎng)站有著遠(yuǎn)遠(yuǎn)高于10年前的動態(tài)效果和互動性,但傳統(tǒng)的網(wǎng)頁服務(wù)系統(tǒng)早已無法跟上當(dāng)今互聯(lián)網(wǎng)速度的要求。在傳統(tǒng)的模式,用戶請求的生命周期如下:
1. 瀏覽器發(fā)送一個HTTP請求到Web服務(wù)器。
2. Web服務(wù)器解析請求,然后讀取數(shù)據(jù)存儲層,制定一個HTML文件,并用一個HTTP響應(yīng)把它發(fā)送到客戶端。
3. HTTP響應(yīng)通過互聯(lián)網(wǎng)傳送到瀏覽器。
4. 瀏覽器解析Web服務(wù)器的響應(yīng),使用HTML文件構(gòu)建了一個的DOM樹,并且下載引用的CSS和JavaScript文件。
5. CSS資源下載后,瀏覽器解析它們,并將它們應(yīng)用到DOM樹。
6. JavaScript資源下載后,瀏覽器解析并執(zhí)行它們。
傳統(tǒng)模式在現(xiàn)代網(wǎng)站中效率是非常低下的,因為很多系統(tǒng)的操作順序,不能互相重疊。一些如延時加載JavaScript、并行下載等優(yōu)化技術(shù)已被網(wǎng)絡(luò)社區(qū)廣泛采用,以此來克服的一些限制。然而,這些優(yōu)化卻很少涉及Web服務(wù)器和瀏覽器的執(zhí)行順序造成的瓶頸。當(dāng)Web服務(wù)器正忙生成一個頁面,瀏覽器處于閑置狀態(tài),浪費其周期無所事事。當(dāng)Web服務(wù)器完成生成頁面,并將其發(fā)送到瀏覽器,瀏覽器則成為性能瓶頸并且Web服務(wù)器對其無從幫助。重疊Web服務(wù)器的生成時間與瀏覽器的渲染時間,我們不僅可以減少最終的時間延遲,也能使網(wǎng)頁更早顯示用戶可見區(qū)域給用戶,從而大大減少用戶對延遲的感知。
Web服務(wù)器的產(chǎn)生時間和瀏覽器的渲染時間重疊,是特別有用的,如Facebook這樣內(nèi)容豐富的網(wǎng)站。一個典型的Facebook的網(wǎng)頁包含許多來源不同的數(shù)據(jù)資料:好友名單,好友動態(tài),廣告等。在傳統(tǒng)的網(wǎng)頁呈現(xiàn)模式的用戶將不得不等到這些查詢數(shù)據(jù)都返回并生成最終文件,然后將其發(fā)送到用戶的電腦。任何一個查詢延遲都將拖慢整個最終文件的生成。
性能測試結(jié)果
下圖是傳統(tǒng)模式和BigPipe性能數(shù)據(jù)比較圖,數(shù)據(jù)是75%用戶對一個頁面中最重要的內(nèi)容(例如:新聞動態(tài)被認(rèn)為是在Facebook主頁上最重要的內(nèi)容)的感知延遲時間。收集數(shù)據(jù)方式是加載Facebook主頁50次并且禁用瀏覽器緩存。該圖顯示BigPipe使用戶在大多數(shù)瀏覽器中感受到的延遲減少了一半。
(Facebook主頁的延遲時間對比)
值得一提的是BigPipe是從微處理器的流水線中得到啟發(fā)。然而,他們的流水線過程之間存在一些差異。例如,雖然大多數(shù)階段BigPipe只能操作一次Pagelet,但有時多個Pagelets的CSS和JavaScript下載卻可以同時運作,這類似于超標(biāo)量微處理器。BigPipe另一個重要區(qū)別是,我們實現(xiàn)了從并行編程引入的“障礙”概念,所有的Pagelets要完成一個特定階段,如多個Pagelet顯示區(qū),它們都可以進(jìn)行進(jìn)一步JavaScript下載和執(zhí)行。
在Facebook,我們鼓勵創(chuàng)造性思考。我們不斷的嘗試創(chuàng)新技術(shù),以使我們的網(wǎng)站更快。
BigPipe如何工作
要利用該Web服務(wù)器和瀏覽器之間的并行性,BigPipe首先分解網(wǎng)頁成多個可調(diào)用的Pagelets。正如流水線微處理器劃分一個指令的生命周期為(如“取指令”,“指令解碼”,“執(zhí)行”,“寫回寄存器”等)多個階段,BigPipe的頁面生成過程分為以下幾個階段:
1. 請求解析:Web服務(wù)器解析和完整性檢查的HTTP請求。
2. 數(shù)據(jù)獲?。篧eb服務(wù)器從存儲層獲取數(shù)據(jù)。
3. 標(biāo)記生成:Web服務(wù)器生成的響應(yīng)的HTML標(biāo)記。
4. 網(wǎng)絡(luò)傳輸:響應(yīng)從Web服務(wù)器傳送到瀏覽器。
5. CSS的下載:瀏覽器下載網(wǎng)頁的CSS的要求。
6. DOM樹結(jié)構(gòu)和CSS樣式:瀏覽器構(gòu)造的DOM文檔樹,然后應(yīng)用它的CSS規(guī)則。
7. JavaScript中下載:瀏覽器下載網(wǎng)頁中JavaScript引用的資源。
8. JavaScript執(zhí)行:瀏覽器的網(wǎng)頁執(zhí)行JavaScript代碼。
前三個階段執(zhí)行,由Web服務(wù)器,最后四個階段是由瀏覽器執(zhí)行。每個Pagelet必須經(jīng)過所有這些階段順序,但BigPipe在不同的階段使幾個Pagelets同時執(zhí)行。
(Facebook主頁的Pagelets,每個矩形對應(yīng)一個Pagelet。)
上面的圖片使用Facebook主頁為例子來說明如何將網(wǎng)頁是分解成Pagelets。該主頁包括幾個Pagelets:“作者Pagelet”,“導(dǎo)航Pagelet”,“新聞動態(tài)Pagelet”,“請求框Pagelet”,“廣告pagelet”,“朋友推薦”和“聯(lián)系”等他們是相互獨立的。當(dāng)“導(dǎo)航Pagelet”顯示給用戶,“新聞動態(tài)Pagelet”仍然可以在服務(wù)器上正在生成。
在BigPipe,一個用戶請求的生命周期是這樣的:在瀏覽器發(fā)送一個HTTP請求到Web服務(wù)器。在收到的HTTP請求,并在上面進(jìn)行一些全面的檢查,網(wǎng)站服務(wù)器立即發(fā)回一個未關(guān)閉的HTML文件,其中包括一個HTML 標(biāo)簽和標(biāo)簽的開始標(biāo)簽。標(biāo)簽包括BigPipe的JavaScript庫來解析Pagelet以后收到的答復(fù)。在標(biāo)簽,有一個模板,它指定了頁面的邏輯結(jié)構(gòu)和Pagelets占位符。例如:
渲染后的第一個反應(yīng)到客戶端,Web服務(wù)器繼續(xù)一個接一個生成Pagelets只要一個Pagelet生成,他將立即刷新到客戶端在一個JSON編碼的對象,包括所有的CSS,JavaScript的pagelet,它的HTML內(nèi)容,以及一些元數(shù)據(jù)所需的資源。例如:
在客戶端在收到Pagelet通過“onPageletArrive”發(fā)出的指令,BigPipe的JavaScript庫將首先下載它的CSS資源;在CSS資源被下載完成后,BigPipe將在Pagelet的標(biāo)記HTML顯示它的innerHTML。多個Pagelets的CSS可在同一時間下載,它們可以根據(jù)其各自CSS的下載完成情況來確認(rèn)顯示順序。在BigPipe中,JavaScript資源的優(yōu)先級低于CSS和頁面內(nèi)容。因此,BigPipe不會在所有Pagelets顯示出來之前下載任何Pagelet中的JavaScript。然后,所有Pagelets的JavaScript異步下載。最后Pagelet的JavaScript初始化代碼根據(jù)其各自的下載完成情況來確定執(zhí)行順序。
這種高度并行系統(tǒng)的最終結(jié)果是,多個Pageletsr的不同執(zhí)行階段同時進(jìn)行。例如,瀏覽器可以正在下載三個Pagelets CSS的資源,同時已經(jīng)顯示另一Pagelet內(nèi)容,與此同時,服務(wù)器也在生成新的Pagelet。從用戶的角度來看,頁面是逐步呈現(xiàn)的。最開始的網(wǎng)頁內(nèi)容會更快的顯示,這大大減少了用戶的對頁面延時的感知。如果您要自己親眼看到區(qū)別,你可以嘗試以下連結(jié): 傳統(tǒng)模式和BigPipe。第一個鏈接是傳統(tǒng)模式單一模式顯示頁面。第二個鏈接是BigPipe管道模式的頁面。如果您的瀏覽器版本比較老,網(wǎng)速也很慢,瀏覽器緩存不佳,哪么兩頁之間的加截時間差別將更加明顯。
近期更新
- [2023-07-26 14:17:28] 為品牌賦能,海外官網(wǎng)品牌數(shù)字化
- [2023-05-06 10:32:26] 青島網(wǎng)站建設(shè)公司,高端網(wǎng)站定制,一站式網(wǎng)站服務(wù)——力圖數(shù)字科技
- [2023-04-27 13:47:54] 高端定制網(wǎng)站建設(shè)——從滿足預(yù)期到走向卓越
- [2023-04-11 09:17:49] H5頁面設(shè)計開發(fā)——移動端傳播利器
- [2022-11-16 10:11:43] windows2012程序在哪
- [2022-04-14 11:01:47] 力圖數(shù)字科技配套網(wǎng)站服務(wù)支持
- [2021-05-18 10:14:11] 青島網(wǎng)站建設(shè)的流程
- [2021-04-29 10:14:38] 企業(yè)定制化官網(wǎng)建設(shè)項目
- [2021-03-05 10:34:45] 移動互聯(lián)時代房地產(chǎn)行業(yè)的微信小程序解決方案
- [2021-01-22 17:29:38] 微信小程序有哪些優(yōu)勢?為什么要開發(fā)微信小程序?
- [2021-01-08 17:28:04] 網(wǎng)站建設(shè)最容易忽略的人性化設(shè)計
- [2020-12-16 16:55:32] 建設(shè)一個常規(guī)的公司網(wǎng)站建設(shè)成本大概是多少?
延伸閱讀
- [2019-05-24 09:56:02] 青島網(wǎng)站制作哪家強(qiáng)
- [2014-03-24 18:05:18] 網(wǎng)站設(shè)計制作的流程控制與管理
- [2011-11-07 11:47:01] 怎樣主動提交網(wǎng)站地圖,讓谷歌公司、雅虎、百度、live.com統(tǒng)統(tǒng)收錄
- [2012-02-18 23:35:18] 網(wǎng)站設(shè)計趨勢-活動站細(xì)分設(shè)計
- [2012-03-03 15:58:05] DEDE欄目名稱長度 修改
- [2013-05-11 22:20:25] 網(wǎng)站優(yōu)化外鏈建設(shè)的誤區(qū)與解決方法
- [2015-01-17 17:41:25] 百度新算法分析:外鏈和內(nèi)容到底哪個更重要些?
- [2014-02-23 22:48:40] 青島高端網(wǎng)站設(shè)計公司
- [2014-11-11 23:15:21] 文件夾刪除不了怎么辦
- [2014-11-09 20:52:24] 網(wǎng)站關(guān)鍵詞暴跌的原因分析與解決辦法
- [2012-04-26 00:18:14] 如何讓百度盡快收錄新網(wǎng)站
- [2011-10-10 22:00:38] 青島網(wǎng)站建設(shè)之網(wǎng)頁如何提高加載速度
解決方案
輪胎行業(yè)網(wǎng)站設(shè)計解決方案 機(jī)械行業(yè)網(wǎng)站設(shè)計解決方案 房地產(chǎn)行業(yè)網(wǎng)站設(shè)計解決方案 科技企業(yè)網(wǎng)站設(shè)計解決方案 電子家電網(wǎng)站設(shè)計解決方案 食品行業(yè)網(wǎng)站設(shè)計解決方案 集團(tuán)公司網(wǎng)站設(shè)計解決方案 企事業(yè)單位網(wǎng)站設(shè)計解決方案 外貿(mào)行業(yè)網(wǎng)站設(shè)計解決方案 健身運動網(wǎng)站設(shè)計解決方案 美容與化妝品網(wǎng)站設(shè)計解決方案 建筑設(shè)計行業(yè)網(wǎng)站設(shè)計解決方案 物流行業(yè)網(wǎng)站設(shè)計解決方案
TAGS關(guān)鍵字
青島輪胎網(wǎng)站設(shè)計公司 頁面設(shè)計 青島輪胎網(wǎng)站設(shè)計 青島SEO 外貿(mào)網(wǎng)站設(shè)計 網(wǎng)站設(shè)計 營銷型網(wǎng)站 微信小程序 robots 青島網(wǎng)站設(shè)計哪家好 官網(wǎng)網(wǎng)站建設(shè) 營銷型網(wǎng)站建設(shè) 企業(yè)建站 舒適的界面 網(wǎng)站制作 搜索引擎 輪胎網(wǎng)站設(shè)計 網(wǎng)站設(shè)計資訊 網(wǎng)頁設(shè)計 新的元素 青島網(wǎng)站制作 html和css 青島網(wǎng)站營銷 微網(wǎng)站 網(wǎng)站優(yōu)化 手機(jī)端的網(wǎng)站 中小型企業(yè)網(wǎng)站建設(shè) 網(wǎng)站策劃 網(wǎng)站SEO 青島開發(fā)區(qū)建站公司