xhq.me
域名年龄: 13年6个月23天HTTP/1.1 200 OK 访问时间:2015年07月28日 00:20:12 服务器:Apache/2.2.14 (Ubuntu) 语言环境:PHP/5.3.2-1ubuntu4.28 设置Cookie:wpmp_switcher=desktop; expires=Tue, 26-Jul-2016 16:20:13 GMT; path=/ X-Pingback: http://b.xhq.me/xmlrpc.php X-Mobilized-By: WordPress Mobile Pack 1.2.4 X-Mod-Pagespeed: 1.9.32.3-4448 动作:Accept-Encoding Content-Encoding: gzip 缓存控制:max-age=0, 不缓存 文件大小:23595 Keep-Alive: timeout=15, max=100 连接:Keep-Alive 类型:text/html; charset=UTF-8 网站编码:UTF-8
Hunter's Blog又一个 WordPress 站点跳至正文首页关于← 早期文章PageSpeed function test发表于 2012 年 10 月 26 日 由 adminContent: 20 blanks:20 character a:aaaaaaaaaaaaaaaaaaaa20 character x:xxxxxxxxxxxxxxxxxxxx留下评论讓 Facebook 速度飆升的秘密武器:Big Pipe 網頁流水線技術发表于 2011 年 09 月 21 日 由 admin原文链接:http://inspire.twgg.org/c/programming/other/rate-soared-to-facebooka39s-secret-weapon-big-pipe-web-pipelining.htmlhttp://www.facebook.com/note.php?note_id=389414033919Facebook的網站速度做為最關鍵的公司任務之一。在2009年,我們成功地實現了Facebook網站速度提升兩倍。而正是我們的工程師團隊的幾個關鍵的創新使它成為可能。在本文中,我將向大家介紹我們的秘密武器之一,我們稱之為BigPipe的偉大底層技術。BigPipe是一個重新設計的基礎動態網頁服務體系。大體思路是,分解網頁成叫做Pagelets的小塊,然後通過Web服務器和瀏覽器建立管道並管理他們在不同階段的運行。這是類似於大多數現代微處理器的流水線執行過程:多重指令管線通過不同的處理器執行單元,以達到性能的最佳。雖然BigPipe是對現有的服務網絡基礎過程的重新設計,但它卻不需要改變現有的網絡瀏覽器或服務器,它完全使用PHP和JavaScript來實現。動機為了更好的瞭解BigPipe,我們需要瞭解一下現有的動態Web服務系統,它的歷史可以追溯到萬維網的初期,但現在與初期相比卻並沒有多少改變。現代網站有著遠遠高於10年前的動態效果和互動性,但傳統的網頁服務系統早已無法跟上當今互聯網速度的要求。在傳統的模式,用戶請求的生命週期如下:1. 瀏覽器發送一個HTTP請求到Web服務器。2. Web服務器解析請求,然後讀取數據存儲層,制定一個HTML文件,並用一個HTTP響應把它發送到客戶端。3. HTTP響應通過互聯網傳送到瀏覽器。4. 瀏覽器解析Web服務器的響應,使用HTML文件構建了一個的DOM樹,並且下載引用的CSS和JavaScript文件。5. CSS資源下載後,瀏覽器解析它們,並將它們應用到DOM樹。6. JavaScript資源下載後,瀏覽器解析並執行它們。傳統模式在現代網站中效率是非常低下的,因為很多系統的操作順序,不能互相重疊。一些如延時加載JavaScript、並行下載等優化技術已被網絡社區廣泛採用,以此來克服的一些限制。然而,這些優化卻很少涉及Web服務器和瀏覽器的執行順序造成的瓶頸。當Web服務器正忙生成一個頁面,瀏覽器處於閒置狀態,浪費其週期無所事事。當Web服務器完成生成頁面,並將其發送到瀏覽器,瀏覽器則成為性能瓶頸並且Web服務器對其無從幫助。重疊Web服務器的生成時間與瀏覽器的渲染時間,我們不僅可以減少最終的時間延遲,也能使網頁更早顯示用戶可見區域給用戶,從而大大減少用戶對延遲的感知。Web服務器的產生時間和瀏覽器的渲染時間重疊,是特別有用的,如Facebook這樣內容豐富的網站。一個典型的Facebook的網頁包含許多來源不同的數據資料:好友名單,好友動態,廣告等。在傳統的網頁呈現模式的用戶將不得不等到這些查詢數據都返回並生成最終文件,然後將其發送到用戶的電腦。任何一個查詢延遲都將拖慢整個最終文件的生成。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同時執行。(Facebook主頁的Pagelets,每個矩形對應一個Pagelet。)上面的圖片使用Facebook主頁為例子來說明如何將網頁是分解成Pagelets。該主頁包括幾個Pagelets:”作者Pagelet”,”導航Pagelet”,”新聞動態Pagelet”,”請求框Pagelet”,”廣告pagelet”,”朋友推薦”和”聯繫”等他們是相互獨立的。當”導航Pagelet”顯示給用戶,”新聞動態Pagelet”仍然可以在服務器上正在生成。在BigPipe,一個用戶請求的生命週期是這樣的:在瀏覽器發送一個HTTP請求到Web服務器。在收到的HTTP請求,並在上面進行一些全面的檢查,網站服務器立即發回一個未關閉的HTML文件,其中包括一個HTML 標籤和標籤的開始標籤。標籤包括BigPipe的JavaScript庫來解析Pagelet以後收到的答覆。在標籤,有一個模板,它指定了頁面的邏輯結構和Pagelets佔位符。例如:渲染後的第一個反應到客戶端,Web服務器繼續一個接一個生成Pagelets只要一個Pagelet生成,他將立即刷新到客戶端在一個JSON編碼的對象,包括所有的CSS,JavaScript的pagelet,它的HTML內容,以及一些元數據所需的資源。例如:在客戶端在收到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的不同執行階段同時進行。例如,瀏覽器可以正在下載三個Pagelets CSS的資源,同時已經顯示另一Page
© 2010 - 2020 网站综合信息查询 同IP网站查询 相关类似网站查询 网站备案查询网站地图 最新查询 最近更新 优秀网站 热门网站 全部网站 同IP查询 备案查询
2024-05-31 00:24, Process in 0.0051 second.