• <strike id="c6ig0"><code id="c6ig0"></code></strike>
  • <center id="c6ig0"></center>
  • <ul id="c6ig0"></ul>
  • 全國服務(wù)熱線:13657234404

    您現(xiàn)在的位置是: 首頁 > 新聞資訊 > 網(wǎng)站建設(shè)常識(shí)

    大型網(wǎng)站建設(shè),高性能的“流水線技術(shù)”網(wǎng)頁 2021-04-01 18:44:43 瀏覽:

    大型網(wǎng)站建設(shè)最關(guān)心的問題就是網(wǎng)站速度,網(wǎng)站速度已成為大型網(wǎng)站建設(shè)公司的主要任務(wù)之一。

    Facebook的網(wǎng)站速度做為最關(guān)鍵的公司任務(wù)之一。在2009年,我們成功地實(shí)現(xiàn)了Facebook網(wǎng)站速度提升兩倍 。而正是我們的工程師團(tuán)隊(duì)的幾個(gè)關(guān)鍵的創(chuàng)新使它成為可能。在本文中,我將向大家介紹我們的秘密武器之一,我們稱之為BigPipe的偉大底層技術(shù)。

    BigPipe是一個(gè)重新設(shè)計(jì)的基礎(chǔ)動(dòng)態(tài)網(wǎng)頁服務(wù)體系。大體思路是,分解網(wǎng)頁成叫做Pagelets的小塊,然后通過Web服務(wù)器和瀏覽器建立管道 并管理他們?cè)诓煌A段的運(yùn)行。這是類似于大多數(shù)現(xiàn)代微處理器的流水線執(zhí)行過程:多重指令管線通過不同的處理器執(zhí)行單元,以達(dá)到性能的最佳。雖然 BigPipe是對(duì)現(xiàn)有的服務(wù)網(wǎng)絡(luò)基礎(chǔ)過程的重新設(shè)計(jì),但它卻不需要改變現(xiàn)有的網(wǎng)絡(luò)瀏覽器或服務(wù)器,它完全使用PHP和JavaScript來實(shí)現(xiàn)。

    動(dòng)機(jī)

    為了更好的了解BigPipe,我們需要了解一下現(xiàn)有的動(dòng)態(tài)Web服務(wù)系統(tǒng),它的歷史可以追溯到萬維網(wǎng)的初期,但現(xiàn)在與初期相比卻并沒有多少改變。 現(xiàn)代網(wǎng)站有著遠(yuǎn)遠(yuǎn)高于10年前的動(dòng)態(tài)效果和互動(dòng)性,但傳統(tǒng)的網(wǎng)頁服務(wù)系統(tǒng)早已無法跟上當(dāng)今互聯(lián)網(wǎng)速度的要求。在傳統(tǒng)的模式,用戶請(qǐng)求的生命周期如下:

    1. 瀏覽器發(fā)送一個(gè)HTTP請(qǐng)求到Web服務(wù)器。
    2. Web服務(wù)器解析請(qǐng)求,然后讀取數(shù)據(jù)存儲(chǔ)層,制定一個(gè)HTML文件,并用一個(gè)HTTP響應(yīng)把它發(fā)送到客戶端。
    3. HTTP響應(yīng)通過互聯(lián)網(wǎng)傳送到瀏覽器。
    4. 瀏覽器解析Web服務(wù)器的響應(yīng),使用HTML文件構(gòu)建了一個(gè)的DOM樹,并且下載引用的CSS和JavaScript文件。
    5. CSS資源下載后,瀏覽器解析它們,并將它們應(yīng)用到DOM樹。
    6. JavaScript資源下載后,瀏覽器解析并執(zhí)行它們。

    傳統(tǒng)模式在現(xiàn)代網(wǎng)站中效率是非常低下的,因?yàn)楹芏嘞到y(tǒng)的操作順序,不能互相重疊。一些如延時(shí)加載JavaScript、并行下載等優(yōu)化技術(shù)已被網(wǎng)絡(luò) 社區(qū)廣泛采用,以此來克服的一些限制。然而,這些優(yōu)化卻很少涉及Web服務(wù)器和瀏覽器的執(zhí)行順序造成的瓶頸。當(dāng)Web服務(wù)器正忙生成一個(gè)頁面,瀏覽器處于 閑置狀態(tài),浪費(fèi)其周期無所事事。當(dāng)Web服務(wù)器完成生成頁面,并將其發(fā)送到瀏覽器,瀏覽器則成為性能瓶頸并且Web服務(wù)器對(duì)其無從幫助。重疊Web服務(wù)器 的生成時(shí)間與瀏覽器的渲染時(shí)間,我們不僅可以減少最終的時(shí)間延遲,也能使網(wǎng)頁更早顯示用戶可見區(qū)域給用戶,從而大大減少用戶對(duì)延遲的感知。

    Web服務(wù)器的產(chǎn)生時(shí)間和瀏覽器的渲染時(shí)間重疊,是特別有用的,如Facebook這樣內(nèi)容豐富的網(wǎng)站。一個(gè)典型的Facebook的網(wǎng)頁包含許多 來源不同的數(shù)據(jù)資料:好友名單,好友動(dòng)態(tài),廣告等。在傳統(tǒng)的網(wǎng)頁呈現(xiàn)模式的用戶將不得不等到這些查詢數(shù)據(jù)都返回并生成最終文件,然后將其發(fā)送到用戶的電 腦。任何一個(gè)查詢延遲都將拖慢整個(gè)最終文件的生成。

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

    1. 請(qǐng)求解析:Web服務(wù)器解析和完整性檢查的HTTP請(qǐng)求。
    2. 數(shù)據(jù)獲取:Web服務(wù)器從存儲(chǔ)層獲取數(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代碼。

    前三個(gè)階段執(zhí)行,由Web服務(wù)器,最后四個(gè)階段是由瀏覽器執(zhí)行。每個(gè)Pagelet必須經(jīng)過所有這些階段順序,但BigPipe在不同的階段使幾個(gè)Pagelets同時(shí)執(zhí)行。

    大型網(wǎng)站建設(shè),高性能的“流水線技術(shù)”網(wǎng)頁(圖1)
    (Facebook主頁的Pagelets,每個(gè)矩形對(duì)應(yīng)一個(gè)Pagelet。)

    上面的圖片使用Facebook主頁為例子來說明如何將網(wǎng)頁是分解成Pagelets。該主頁包括幾個(gè)Pagelets:“作者Pagelet”, “導(dǎo)航Pagelet”,“新聞動(dòng)態(tài)Pagelet”,“請(qǐng)求框Pagelet”,“廣告pagelet”,“朋友推薦”和“聯(lián)系”等他們是相互獨(dú)立的。 當(dāng)“導(dǎo)航Pagelet”顯示給用戶,“新聞動(dòng)態(tài)Pagelet”仍然可以在服務(wù)器上正在生成。

    在BigPipe,一個(gè)用戶請(qǐng)求的生命周期是這樣的:在瀏覽器發(fā)送一個(gè)HTTP請(qǐng)求到Web服務(wù)器。在收到的HTTP請(qǐng)求,并在上面進(jìn)行一些全面的 檢查,網(wǎng)站服務(wù)器立即發(fā)回一個(gè)未關(guān)閉的HTML文件,其中包括一個(gè)HTML 標(biāo)簽和標(biāo)簽的開始標(biāo)簽。標(biāo)簽包括BigPipe的JavaScript庫來解析Pagelet以后收到的答復(fù)。在標(biāo)簽,有一個(gè)模板,它指定了頁面的邏輯結(jié) 構(gòu)和Pagelets占位符。例如:

     
    渲染后的第一個(gè)反應(yīng)到客戶端,Web服務(wù)器繼續(xù)一個(gè)接一個(gè)生成Pagelets只要一個(gè)Pagelet生成,他將立即刷新到客戶端在一個(gè)JSON編碼的對(duì)象,包括所有的CSS,JavaScript的pagelet,它的HTML內(nèi)容,以及一些元數(shù)據(jù)所需的資源。例如:
     

    在客戶端在收到Pagelet通過“onPageletArrive”發(fā)出的指令,BigPipe的JavaScript庫將首先下載它的CSS資 源;在CSS資源被下載完成后,BigPipe將在Pagelet的標(biāo)記HTML顯示它的innerHTML。多個(gè)Pagelets的CSS可在同一時(shí)間 下載,它們可以根據(jù)其各自CSS的下載完成情況來確認(rèn)顯示順序。在BigPipe中,JavaScript資源的優(yōu)先級(jí)低于CSS和頁面內(nèi)容。因 此,BigPipe不會(huì)在所有Pagelets顯示出來之前下載任何Pagelet中的JavaScript。然后,所有Pagelets的 JavaScript異步下載。最后Pagelet的JavaScript初始化代碼根據(jù)其各自的下載完成情況來確定執(zhí)行順序。

    這種高度并行系統(tǒng)的最終結(jié)果是,多個(gè)Pageletsr的不同執(zhí)行階段同時(shí)進(jìn)行。例如,瀏覽器可以正在下載三個(gè)Pagelets CSS的資源,同時(shí)已經(jīng)顯示另一Pagelet內(nèi)容,與此同時(shí),服務(wù)器也在生成新的Pagelet。從用戶的角度來看,頁面是逐步呈現(xiàn)的。最開始的網(wǎng)頁內(nèi) 容會(huì)更快的顯示,這大大減少了用戶的對(duì)頁面延時(shí)的感知。如果您要自己親眼看到區(qū)別,你可以嘗試以下連結(jié): 傳統(tǒng)模式BigPipe。第一個(gè)鏈接是傳統(tǒng)模式單一模式顯示頁面。第二個(gè)鏈接是BigPipe管道模式的頁面。如果您的瀏覽器版本比較老,網(wǎng)速也很慢,瀏覽器緩存不佳,哪么兩頁之間的加截時(shí)間差別將更加明顯。

    性能測(cè)試結(jié)果

    下圖是傳統(tǒng)模式和BigPipe性能數(shù)據(jù)比較圖,數(shù)據(jù)是75%用戶對(duì)一個(gè)頁面中最重要的內(nèi)容(例如:新聞動(dòng)態(tài)被認(rèn)為是在Facebook主頁上最重 要的內(nèi)容)的感知延遲時(shí)間。收集數(shù)據(jù)方式是加載Facebook主頁50次并且禁用瀏覽器緩存。該圖顯示BigPipe使用戶在大多數(shù)瀏覽器中感受到的延 遲減少了一半。

    大型網(wǎng)站建設(shè),高性能的“流水線技術(shù)”網(wǎng)頁(圖2)
    (Facebook主頁的延遲時(shí)間對(duì)比)

    值得一提的是BigPipe是從微處理器的流水線中得到啟發(fā)。然而,他們的流水線過程之間存在一些差異。例如,雖然大多數(shù)階段BigPipe只能操 作一次Pagelet,但有時(shí)多個(gè)Pagelets的CSS和JavaScript下載卻可以同時(shí)運(yùn)作,這類似于超標(biāo)量微處理器。BigPipe另一個(gè)重 要區(qū)別是,我們實(shí)現(xiàn)了從并行編程引入的“障礙”概念,所有的Pagelets要完成一個(gè)特定階段,如多個(gè)Pagelet顯示區(qū),它們都可以進(jìn)行進(jìn)一步 JavaScript下載和執(zhí)行。

    在Facebook,我們鼓勵(lì)創(chuàng)造性思考。我們不斷的嘗試創(chuàng)新技術(shù),以使我們的網(wǎng)站更快。
    作者蔣長浩目前是Facebook的研究科學(xué)家,他致力于研究使網(wǎng)站更快的各種創(chuàng)新。
    (譯者還找到了幾篇關(guān)于BigPipe的文章,如果有興趣大家可以了解下:Facebook創(chuàng)新之BigPipe:優(yōu)化頁面加載時(shí)間、名站技術(shù)分析 — facebook奇特的頁面加載技術(shù)、Facebook讓網(wǎng)站速度提升一倍的BigPipe技術(shù)分析Facebooks BigPipe Done in Java、Open BigPipe javascript implementation、Tutorial: Implementing Facebook’s BigPipe Using ASP.Net MVCBigPipe Done in Node.js
    相關(guān)資訊

    【武漢網(wǎng)站設(shè)計(jì)與定制】提升您的在線業(yè)務(wù)形象

    網(wǎng)站定制的重要性在當(dāng)今數(shù)字化時(shí)代,企業(yè)的在線形象尤為重要。武漢的網(wǎng)站定制服務(wù)能為企業(yè)提供個(gè)性化的解決方案,確保網(wǎng)站不僅僅是一個(gè)信息展示平臺(tái),而是能夠反映出品牌的獨(dú)特性和價(jià)值。定制的網(wǎng)站可以適應(yīng)不同的行業(yè)需求,從而更好地滿足用戶的期望和需求。網(wǎng)..

    【武漢網(wǎng)絡(luò)安全服務(wù)】 提升網(wǎng)站防護(hù)能力

    武漢網(wǎng)絡(luò)安全的重要性在當(dāng)今的信息化社會(huì)中,網(wǎng)絡(luò)安全對(duì)于企業(yè)和組織的運(yùn)營至關(guān)重要。武漢作為中部地區(qū)的重要城市,其官方網(wǎng)站和電子商務(wù)平臺(tái)眾多,面臨著各種網(wǎng)絡(luò)攻擊和信息泄露的風(fēng)險(xiǎn)。建立健全的網(wǎng)絡(luò)安全措施不僅能夠保護(hù)企業(yè)的數(shù)據(jù)資源,還能維護(hù)客戶的信任..

    【武漢購物網(wǎng)站】 提供優(yōu)質(zhì)的購物體驗(yàn)

    武漢購物網(wǎng)站的優(yōu)勢(shì)武漢購物網(wǎng)站作為地方電商的代表,具備多個(gè)顯著的優(yōu)勢(shì)。它們能夠提供本地化的服務(wù),消費(fèi)者可以方便地瀏覽本地商家的產(chǎn)品,享受快速的配送服務(wù)。這意味著消費(fèi)者不再受限于海外電商的漫長配送時(shí)間,并且可以享受到更為優(yōu)質(zhì)的售后服務(wù)。購物網(wǎng)站..

    【武漢網(wǎng)站模板】提升您的在線業(yè)務(wù)形象

    網(wǎng)站模板的定義與重要性網(wǎng)站模板指的是為特定行業(yè)或用途設(shè)計(jì)的網(wǎng)頁框架,這些模板能夠簡化網(wǎng)站建設(shè)過程,使企業(yè)能夠快速上線并展現(xiàn)其品牌形象。對(duì)于武漢的企業(yè)選擇一個(gè)合適的網(wǎng)站模板非常重要,因?yàn)檫@不僅影響用戶體驗(yàn),也影響到網(wǎng)站的搜索引擎優(yōu)化(SEO)效..

    【武漢網(wǎng)站案例】優(yōu)秀的設(shè)計(jì)與實(shí)施

    武漢網(wǎng)站設(shè)計(jì)的特點(diǎn)武漢網(wǎng)站設(shè)計(jì)的特點(diǎn)體現(xiàn)在多個(gè)方面。武漢的文化背景豐富,設(shè)計(jì)師們通常會(huì)結(jié)合本地的歷史、文化以及生活習(xí)慣來創(chuàng)造符合用戶需求的網(wǎng)站。,許多網(wǎng)站在配色上傾向于使用傳統(tǒng)的漢字色調(diào)和文化符號(hào),這不僅增強(qiáng)了網(wǎng)站的獨(dú)特性,也使用戶在瀏覽時(shí)感..

    關(guān)于我們

    武漢市邁佳科技有限公司是一家以精準(zhǔn)營銷和流量轉(zhuǎn)化為核心的互聯(lián)網(wǎng)營銷服務(wù)商,主要提供網(wǎng)站建設(shè), SEM外包服務(wù)、移動(dòng)互聯(lián)網(wǎng)廣告服務(wù)、SEO優(yōu)化服務(wù)、社交媒體營銷服務(wù),大數(shù)據(jù)運(yùn)營等等,涉及教育培訓(xùn)、餐飲服務(wù)、機(jī)械設(shè)備、等行業(yè)。邁佳服務(wù)于各行各業(yè),對(duì)中小企業(yè)網(wǎng)絡(luò)營銷,電子商務(wù)有深刻的理解和經(jīng)驗(yàn)。邁佳深知核心技術(shù)是企業(yè)長期發(fā)展的重要基礎(chǔ), 邁佳一直致力于自主研發(fā), 構(gòu)建了從產(chǎn)品管理, 界面設(shè)計(jì), 代碼開發(fā), 軟件測(cè)試的開發(fā)體系, 并持續(xù)進(jìn)行研發(fā)投入。 邁佳的目的是為客戶提供更高端、專業(yè)、豐富的品質(zhì)服務(wù),幫助客戶提高互聯(lián)網(wǎng)附加值的同時(shí)不斷成長和壯大。公司先后榮獲國家高新技術(shù)企業(yè),國家級(jí)科技型中小企業(yè),湖...

    查看更多 >>

    聯(lián)系我們

    Copyright ? 武漢市邁佳科技有限公司 All Right Reserved. 鄂ICP備2020023246號(hào)


    關(guān)于我們 | 聯(lián)系我們 | 網(wǎng)站建設(shè)| 網(wǎng)站地圖

    返回頂部 中文黄色一级网站,日韩人人妻区一中文字目,日韩av免费在线,999国产高清网
  • <strike id="c6ig0"><code id="c6ig0"></code></strike>
  • <center id="c6ig0"></center>
  • <ul id="c6ig0"></ul>