http請求頭的數(shù)據(jù)量
我們先分析下請求頭,看看每次請求都帶了那些額外的數(shù)據(jù).下面是監(jiān)控的google的請求頭
Host www.google.com.hk
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 GTBDFff GTB7.0
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language zh-cn,en-us;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Proxy-Connection keep-alive
返回的response head
Date Sat, 17 Apr 2010 08:18:18 GMT
Expires -1
Cache-Control private, max-age=0
Content-Type text/html; charset=UTF-8
Set-Cookie PREF=ID=b94a24e8e90a0f50:NW=1:TM=1271492298:LM=1271492298:S=JH7CxsIx48Zoo8Nn; expires=Mon, 16-Apr-2012 08:18:18 GMT; path=/; domain=.google.com.hk NID=33=EJVyLQBv2CSgpXQTq8DLIT2JQ4aCAE9YKkU2x-h4hVw_ATrGx7njA69UUBMbzVHVnkAOe_jlGGzOoXhQACSFDP1i53C8hWjRTJd0vYtRNWhGYGv491mwbngkT6LCYbvg; expires=Sun, 17-Oct-2010 08:18:18 GMT; path=/; domain=.google.com.hk; HttpOnly
Content-Encoding gzip
Server gws
Content-Length 4344
這里發(fā)送的請求頭的大小大概420 bytes,返回的請求頭大概 600 bytes。
可見每次請求都會帶上一些額外的信息進行傳輸(這次請求中還沒有帶cookie),當(dāng)請求的資源很小,比如1個不到1k的圖標(biāo),可能request帶的數(shù)據(jù)比實際圖標(biāo)的數(shù)據(jù)量還大。
所以當(dāng)請求越多的時候,在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)自然就多,傳輸速度自然就慢了。
其實request自帶的數(shù)據(jù)量還是小問題,畢竟request能帶的數(shù)據(jù)量還是有限的。
http連接的開銷
相比request頭部多余的數(shù)據(jù),http連接的開銷則更加嚴重。先看看從用戶輸入1個URL到下載內(nèi)容到客戶端需要經(jīng)過哪些階段:
1. 域名解析
2. 開啟TCP連接
3. 發(fā)送請求
4. 等待(主要包括網(wǎng)絡(luò)延遲和服務(wù)器處理時間)
5. 下載資源
可能很多人認為每次請求大部分時間都花在下載資源上,讓我們看看blogjava資源下載瀑布圖(每種顏色代表的階段與上面5個階段對應(yīng)):
看了上圖你可能驚訝,花費在等待階段的時間比實際下載的時間要多的多,上圖告訴我們:
1. 每次請求花費的大部分時間在其他階段,而不是在下載資源階段
2. 再小的資源照樣會花費很多時間在其他階段,只是下載階段會比較短(見上圖的第6個資源,才284Byte)。
正對上面提到的2種情況,我們應(yīng)該要怎么進行優(yōu)化了?減少請求數(shù)來減少其他階段的花銷和網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)。
如何減少請求數(shù)
1、合并文件
合并文件就是把很多JS文件合并成1個文件,很多CSS文件合并成1個文件,這種方法應(yīng)該很多人用到過,這里不做詳細介紹,
只推薦1個合并的工具:yuiCompressor 這個工具yahoo提供的。 http://developer.yahoo.com/yui/compressor/
2、合并圖片
這是利用css sprite,通過控制背景圖片的位置來顯示不同的圖片。這種技術(shù)也是大家都用過的,不做詳細介紹,推薦1個在線合并圖片的網(wǎng)站:http://csssprites.com/
3、把JS、CSS合并到1個文件
上面第1種方法說的只是把幾個JS文件合并成1個JS文件,幾個CSS文件合并成1個CSS文件,哪如何把CSS和JS都合并到1個文件中,見我的另1篇文章:
http://www.blogjava.net/BearRui/archive/2010/04/18/combin_css_js.html
4、使用Image maps
Image maps 是把多個圖片合并成1個圖片,然后使用html中的<map>標(biāo)簽連接圖片,并實現(xiàn)點擊圖片不同的區(qū)域執(zhí)行不同的動作,image map在導(dǎo)航條中比較容易使用到。
image map的使用方法見: http://www.w3.org/TR/html401/struct/objects.html#h-13.6
5、data嵌入圖片
這種方法把圖片進行編碼直接嵌入到html中進行使用,以減少HTTP請求,但這個會增加HTML頁面的大小,而且這樣嵌入的圖片不能緩存。見下面這個圖片:
上面的圖片就是把圖片進行base64編碼后使用data:嵌入到html中,代碼如下(后面的省略了,大家可以查看源代碼看):
<IMG SRC="data:image/gif;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QAWRXhpZgAASUkqAAgAA......">
其中g(shù)oogle的視頻搜索中,搜索出來的視頻縮略圖就都是使用嵌入的圖片的,見下圖:
以上幾種方法在都有利有弊,在不同情況下可以選擇不同的使用方式,比如使用data嵌入圖片雖然減少了請求數(shù),但會增加頁面大小。
所以微軟的bing搜索在用戶第一次訪問的時候使用data嵌入圖片,然后后臺懶加載真真的圖片,以后訪問就直接使用緩存的圖片,而不使用data。
[聲明] 轉(zhuǎn)載請注明出處:http://www.blogjava.net/BearRui/。 禁止商用!
高性能WEB開發(fā) 為什么要減少請求數(shù),如何減少請求數(shù)!
2020-07-17 14:51blogjava 編程技術(shù)
我們先分析下請求頭,看看每次請求都帶了那些額外的數(shù)據(jù).下面是監(jiān)控的google的請求頭
延伸 · 閱讀
- 2024-12-13摩爾線程開源高性能線性代數(shù)模板庫 MUTLASS,加速
- 2024-12-13高性能開放式座艙!梅賽德斯新超跑發(fā)布 3.6秒破
- 2022-02-13C#中一個高性能異步socket封裝庫的實現(xiàn)思路分享
- 2022-01-22golang配制高性能sql.DB的使用
- 2022-01-21使用Go HTTP客戶端打造高性能服務(wù)
- 2021-12-02一篇文章帶你了解SpringBoot Web開發(fā)
- 編程技術(shù)
如何成為專業(yè)的惡意軟件研究員
當(dāng)今社會,不管任何一門技術(shù),或者你從事任何一種職業(yè),都需要掌握相關(guān)的知識,現(xiàn)代的技術(shù)其實就是以前稱的“手藝”,大多數(shù)的手藝的學(xué)習(xí)和入門其...
- 編程技術(shù)
IT工程師都需要掌握的容器技術(shù)之DockerCompose
今天我們繼續(xù)來學(xué)習(xí)Docker技術(shù)之Docker Compose,本篇文章將是我們?nèi)萜骷夹g(shù)系列的最后一篇文章,讀過我們?nèi)萜骷夹g(shù)全系列文章的小伙伴肯定有疑問,整個系...
- 編程技術(shù)
面試官:說說你對堆的理解?如何實現(xiàn)?應(yīng)用場景?
在計算機科學(xué)中,圖是一種抽象的數(shù)據(jù)類型,在圖中的數(shù)據(jù)元素通常稱為結(jié)點,V是所有頂點的集合,E是所有邊的集合。...
- 編程技術(shù)
拿高薪的程序員,都學(xué)習(xí)了什么編程語言?
人的一生從來不是從出生那一刻就注定的,總是會因為我們的選擇不斷的發(fā)生改變,小到一件衣服的色彩,大到未來人生的規(guī)劃!選錯一件衣服可以重來,...
- 編程技術(shù)
解決Fiddler在win7系統(tǒng)下的安全證書問題
今天小編就為大家分享一篇關(guān)于解決Fiddler在win7系統(tǒng)下的安全證書問題,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起...
- 編程技術(shù)
TIOBE4月編程語言排行榜出爐!漲幅最大的語言竟然是它?
TIOBE 近日發(fā)布的4 月編程語言排行榜。前十榜單中,C、Java、Python 仍分別占據(jù)前三位。漲幅最大的語言是Python。...
- 編程技術(shù)
在地址欄里顯示logo的實現(xiàn)方法
在地址欄里顯示logo,其實大家可以看一些網(wǎng)站的頭部里面,下面的方法講的更仔細。...
- 編程技術(shù)
Python“王者”地位不保!Julia和Swift后來居上
在過去的十年里,Python 一直統(tǒng)治著數(shù)據(jù)科學(xué)和機器學(xué)習(xí),但是 Julia 和 Swift 后來居上,正準(zhǔn)備超越Python。...