国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

網(wǎng)頁(yè)性能: 緩存效率實(shí)踐

anRui / 700人閱讀

摘要:上圖顯示了桌面瀏覽器一周內(nèi)的緩存命中率。和早期版本用當(dāng)前方法測(cè)試的緩存命中率為,過(guò)版本及以上卻大大的下降。實(shí)際應(yīng)用總的來(lái)看緩存命中率相比年有所提高。如果忽略及以上版本無(wú)法測(cè)試,這樣緩存命中率由年的左右提高到現(xiàn)在的。

[]()

Ryan Albrecht
caisijie 翻譯于2015/12/21

任何網(wǎng)站都會(huì)考慮性能,不管是當(dāng)?shù)氐睦戆l(fā)店或者有巨大知識(shí)庫(kù)的維基百科。這是一個(gè)無(wú)法被忽略的需求。因此緩存變得尤其重要 —— 一種讓網(wǎng)站變快的極佳途徑,通過(guò)保存部分?jǐn)?shù)據(jù),使得下次訪問(wèn)時(shí)不用再次計(jì)算或者下載。

我們團(tuán)隊(duì)最近在討論Facebook.com沒(méi)有被緩存的的部分網(wǎng)頁(yè),問(wèn)題就來(lái)了:Facebook每?jī)商彀l(fā)布一次代碼,緩存的效率有多高?我們是否發(fā)布代碼太頻繁導(dǎo)致瀏覽器的緩存沒(méi)有充分利用?為了找到答案,我們?cè)赮ahoo"s Performance Research blog?發(fā)現(xiàn)一篇研究關(guān)于瀏覽器緩存對(duì)網(wǎng)頁(yè)性能的影響的文章。

我們從中驚訝的發(fā)現(xiàn)一個(gè)悲觀的結(jié)論:有20%的頁(yè)面訪問(wèn)沒(méi)有經(jīng)過(guò)緩存。但是這份研究至今已超過(guò)8年,那時(shí)候?yàn)g覽器還無(wú)法顯示如頂部截圖那樣的瀑布式流量圖,那時(shí)候IE7和jQuery才發(fā)布了幾個(gè)月。我想忘記這份研究吧,jQuery 1.0 —— 老掉牙了。為了得到更精確的結(jié)果,我們決定重新測(cè)試看看事情是否有所改觀。

重開(kāi)課題

在原來(lái)的研究中,Yahoo構(gòu)造的一種帶特殊頭的圖片。這些頭會(huì)告訴瀏覽器如果同樣的圖片被請(qǐng)求兩次,不會(huì)進(jìn)行正常的請(qǐng)求,而是根據(jù)圖片是否變動(dòng)這個(gè)條件發(fā)送GET請(qǐng)求。這種GET請(qǐng)求會(huì)把最后修改時(shí)間的頭傳給服務(wù)器,如果請(qǐng)求時(shí)間和圖片最后修改時(shí)間間隔太小,則返回304沒(méi)有修改而是不是200成功。Yahoo最后查看服務(wù)器日志進(jìn)行分析。

與之類似,我們構(gòu)建了一個(gè)PHP終端來(lái)提供圖片以及向數(shù)據(jù)庫(kù)記錄請(qǐng)求。圖片附帶特殊的頭來(lái)控制瀏覽器的緩存和中間件的緩存,而且我們會(huì)在請(qǐng)求同時(shí)記錄所有頭的信息。而響應(yīng)頭如下:

Cache-Control: no-cache, private, max-age=0
ETag: abcde
Expires: Thu, 15 Apr 2014 20:00:00 GMT
Pragma: private
Last-Modified: $now // RFC1123 format

在IE7和IE8下,為了繞過(guò)一些已知問(wèn)題,需要特殊修改:

Cache-Control: private, max-age=0
Pragma: no-cache

當(dāng)瀏覽器請(qǐng)求圖片時(shí),會(huì)沒(méi)有附帶或者附帶一到兩個(gè)額外頭部:

沒(méi)有額外頭部,因?yàn)闉g覽器并不認(rèn)識(shí)這個(gè)圖片。我們返回Status: 200 Success 以及?image data ,然后瀏覽器會(huì)緩存這些內(nèi)容。并生成Last-Modified?時(shí)間和?ETag值會(huì)已備下次使用。

if-none-match?和?if-modified-since?頭的一個(gè)或兩個(gè),它說(shuō)明瀏覽器之前獲取過(guò)圖片。服務(wù)器會(huì)返回Status: 304 Not Modified并且不包含圖片數(shù)據(jù)。我們還把Last-Modified頭設(shè)置為$header["if-modified-since"]而不是$now,這樣瀏覽器每次就能獲得相同的響應(yīng)內(nèi)容。

最后的問(wèn)題就是什么時(shí)候和在哪里發(fā)送圖片請(qǐng)求。我們決定在Facebook搜索條旁邊包含一個(gè)img標(biāo)簽,這樣Facebook每次重載的時(shí)候就會(huì)渲染。在一個(gè)整個(gè)頁(yè)面的重載中,內(nèi)存資源會(huì)被卸載,然后瀏覽器根據(jù)緩存頭重新請(qǐng)求CSS,JavaScript和我們的圖片。所以這是測(cè)量緩存是否工作的最佳位置。

在準(zhǔn)備好終端去記錄請(qǐng)求日志和讓img標(biāo)簽去發(fā)送請(qǐng)求之后,我們馬上開(kāi)始...

研究結(jié)果

經(jīng)過(guò)幾周的數(shù)據(jù)收集和填滿緩存,對(duì)比最后超過(guò)7天的數(shù)據(jù)。初次結(jié)果同樣出乎意料:25.5%的請(qǐng)求沒(méi)有命中緩存。我們把數(shù)據(jù)按接口分類,桌面和移動(dòng)設(shè)備,但是結(jié)果相似:桌面版24.8%以及移動(dòng)版的26.9%請(qǐng)求沒(méi)有命中緩存。這不是期望的結(jié)果,所以我們繼續(xù)深入調(diào)試。

把桌面數(shù)據(jù)按瀏覽器劃分后變得一目了然。

上圖顯示了桌面瀏覽器一周內(nèi)的緩存命中率。使用Chrome和Opera顯然從瀏覽器緩存受益更多。你可能注意到Fireforx并沒(méi)有出現(xiàn)在表中,這是有原因的。Firefox v31和早期版本用當(dāng)前方法測(cè)試的緩存命中率為80%,過(guò)v32版本及以上卻大大的下降。v32 版本說(shuō)明解釋了緩存后臺(tái)會(huì)?記錄并重用最近的響應(yīng)頭。如果重用響應(yīng),我們的終端就沒(méi)法收到請(qǐng)求并記錄日志。這樣測(cè)試會(huì)錯(cuò)誤的認(rèn)為Firefox表現(xiàn)糟糕。但實(shí)際上仍在命中本地緩存;只是無(wú)法統(tǒng)計(jì)信息。考慮到這點(diǎn),我們把Firefox排除在測(cè)試結(jié)果之外。

讓我們看看移動(dòng)端的情況

不同產(chǎn)品的緩存命中在68%和84%之間浮動(dòng),和之前的線差不多。移動(dòng)端的變動(dòng)性更多,因?yàn)樵S多不同 ?year class 的設(shè)備在訪問(wèn)移動(dòng)網(wǎng)頁(yè),而且每一個(gè)瀏覽器版本都有一個(gè)可能的范圍。這些數(shù)字普遍比桌面版的低但是排序基本一致。

我們還可以看看不同用戶命中空緩存的比例

平均44.6%的用戶獲取了空緩存。這佐證了Yahoo在2007年關(guān)于每個(gè)用戶命中率的結(jié)果。

更進(jìn)一步

還沒(méi)有完呢。在Facebook,我們希望小步快走的每天兩次地發(fā)布包含當(dāng)天完成的所有優(yōu)秀功能。這就引出一個(gè)問(wèn)題:瀏覽器緩存生命周期是多少?我們可以通過(guò)把請(qǐng)求頭if-modified-since的值減去當(dāng)前時(shí)間值,這樣就可以得到這個(gè)用戶命中緩存的存活時(shí)間。

所以我們發(fā)掘數(shù)據(jù)。仍然是最近一周的數(shù)據(jù),我們生成描述緩存持續(xù)命中(請(qǐng)求返回304)時(shí)間分布的柱狀圖。換一種說(shuō)法,每次重新獲取圖片的間隔有多長(zhǎng)。

橫軸 duration 單位是小時(shí),豎線 p50_(百分之50), _mean_(平均)和 _p75(百分之75)分別表示對(duì)應(yīng)請(qǐng)求比例的緩存時(shí)間。比如,_p50 表示50%的請(qǐng)求在命中最多47小時(shí)之前生成的緩存,類似的 p75 表明25%的請(qǐng)求的緩存存在的時(shí)間至少有260個(gè)小時(shí)。在移動(dòng)端做同樣的分析顯示有50%的請(qǐng)求的緩存不會(huì)超過(guò)12個(gè)小時(shí)。

實(shí)際應(yīng)用

總的來(lái)看緩存命中率相比2007年有所提高。如果忽略Firefox v32及以上版本(無(wú)法測(cè)試),這樣緩存命中率由2007年的80%左右提高到現(xiàn)在的84.1%。另一方面,緩存保持活躍的時(shí)間并不是很長(zhǎng)。根據(jù)我們的研究,在桌面版,有42%概率任何請(qǐng)求的緩存的存在時(shí)間不超過(guò)47小時(shí)。這是一個(gè)新的維度,而且在某些網(wǎng)站影響突出。

很容易解釋為什么緩存存在時(shí)間通常很短。看看因特網(wǎng)如何傳輸和網(wǎng)頁(yè)大小size從2007年至今的變化。在2007年,家庭有線帶寬是2.5Mbps,Yahoo主頁(yè)168.1KB。如今,我有8Mbps的LTE移動(dòng)下載帶寬,Yahoo主頁(yè)是768KB。現(xiàn)在網(wǎng)頁(yè)平均大小是1MB,對(duì)瀏覽器優(yōu)化造成了更大的壓力。

因此利用好瀏覽器緩存仍然重要,如果用好帶來(lái)的收益也會(huì)比8年前更大。我們的最佳實(shí)踐是使用外部樣式和腳本,包含Cache-Control和Etag頭,傳輸層數(shù)據(jù)壓縮,使用URL使緩存資源失效,把平凡更新的資源和穩(wěn)定資源分開(kāi)。所有這些技術(shù)都能在任何網(wǎng)站協(xié)同工作,而不單單是Facebook。我們一開(kāi)始擔(dān)心自己的發(fā)布流程會(huì)給緩存性能帶來(lái)負(fù)面影響,但結(jié)果并不是這樣。實(shí)際上,我們使用這份數(shù)據(jù)專注于改進(jìn)讓所有人訪問(wèn)www.facebook.com都能通過(guò)緩存。真是有意思的一次緩存挖掘之旅。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/55066.html

相關(guān)文章

  • 網(wǎng)頁(yè)性能緩存效率實(shí)踐

    摘要:上圖顯示了桌面瀏覽器一周內(nèi)的緩存命中率。和早期版本用當(dāng)前方法測(cè)試的緩存命中率為,過(guò)版本及以上卻大大的下降。實(shí)際應(yīng)用總的來(lái)看緩存命中率相比年有所提高。如果忽略及以上版本無(wú)法測(cè)試,這樣緩存命中率由年的左右提高到現(xiàn)在的。 [showImg(https://segmentfault.com/img/remote/1460000006788057);]() showImg(https://seg...

    Ashin 評(píng)論0 收藏0
  • 前端性能優(yōu)化

    摘要:端優(yōu)談?wù)勱P(guān)于前端的緩存的問(wèn)題我們都知道對(duì)頁(yè)面進(jìn)行緩存能夠有利于減少請(qǐng)求發(fā)送,從而達(dá)到對(duì)頁(yè)面的優(yōu)化。而作為一名有追求的前端,勢(shì)必要力所能及地優(yōu)化我們前端頁(yè)面的性能。這種方式主要解決了淺談前端中的過(guò)早優(yōu)化問(wèn)題過(guò)早優(yōu)化是萬(wàn)惡之源。 優(yōu)化向:?jiǎn)雾?yè)應(yīng)用多路由預(yù)渲染指南 Ajax 技術(shù)的出現(xiàn),讓我們的 Web 應(yīng)用能夠在不刷新的狀態(tài)下顯示不同頁(yè)面的內(nèi)容,這就是單頁(yè)應(yīng)用。在一個(gè)單頁(yè)應(yīng)用中,往往只有一...

    Dean 評(píng)論0 收藏0
  • 前端優(yōu)化 - 收藏集 - 掘金

    摘要:雖然有著各種各樣的不同,但是相同的是,他們前端優(yōu)化不完全指南前端掘金篇幅可能有點(diǎn)長(zhǎng),我想先聊一聊閱讀的方式,我希望你閱讀的時(shí)候,能夠把我當(dāng)作你的競(jìng)爭(zhēng)對(duì)手,你的夢(mèng)想是超越我。 如何提升頁(yè)面渲染效率 - 前端 - 掘金Web頁(yè)面的性能 我們每天都會(huì)瀏覽很多的Web頁(yè)面,使用很多基于Web的應(yīng)用。這些站點(diǎn)看起來(lái)既不一樣,用途也都各有不同,有在線視頻,Social Media,新聞,郵件客戶端...

    VincentFF 評(píng)論0 收藏0
  • JHipster技術(shù)簡(jiǎn)介

    摘要:本文簡(jiǎn)單介紹是什么,為什么用,怎么用。技術(shù)棧是什么是一個(gè)開(kāi)發(fā)平臺(tái),用于生成,開(kāi)發(fā),部署和。實(shí)現(xiàn)需定制化源碼。 本文簡(jiǎn)單介紹Jhipster是什么,為什么用Jhipster,怎么用Jhipster。 WHAT - 技術(shù)棧 JHipster是什么 JHipster是一個(gè)開(kāi)發(fā)平臺(tái),用于生成,開(kāi)發(fā),部署Spring Boot + Angular/React Web Application和Sp...

    hightopo 評(píng)論0 收藏0
  • 精讀《高性能 javascript》

    摘要:嵌套對(duì)象成員會(huì)造成重大性能影響盡量少用。一般來(lái)說(shuō)你可以通過(guò)這種方法提高代碼的性能將經(jīng)常使用的對(duì)象成員數(shù)組項(xiàng)和域外變量存入局部變量中。在反復(fù)訪問(wèn)的地方使用局部變量存放引用小心地處理集合因?yàn)樗麄儽憩F(xiàn)出存在性總是對(duì)底層文檔重新查詢。 前言 本期我來(lái)給大家推薦的書(shū)是《高性能JavaScript》,在這本書(shū)中我們能夠了解 javascript 開(kāi)發(fā)過(guò)程中的性能瓶頸,如何提升各方面的性能,包括代碼...

    caohaoyu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<