● 服務(wù)器花在處理客戶(hù)請(qǐng)求上的時(shí)間。
● 網(wǎng)絡(luò)花在傳輸請(qǐng)求和響應(yīng)上的時(shí)間
● 客戶(hù)花在組裝并顯示結(jié)果內(nèi)容上的時(shí)間。
當(dāng)然,實(shí)際情形遠(yuǎn)比這要復(fù)雜,原因下面分別進(jìn)行介紹。
服務(wù)發(fā)現(xiàn)
開(kāi)始訪問(wèn)任何網(wǎng)站時(shí),客戶(hù)都需要先找到服務(wù)器。通常這是由DNS查詢(xún)完成的,盡管客戶(hù)可能已經(jīng)緩存了服務(wù)器的IP地址。有時(shí)候可能需要多走幾步才能找到正確的服務(wù)器,像HTTP重定向這種操作,就會(huì)把客戶(hù)引向另外的地方。
什么時(shí)候客戶(hù)需要從新的服務(wù)器獲取內(nèi)容,都要經(jīng)歷這種服務(wù)發(fā)現(xiàn)過(guò)程。結(jié)果,對(duì)于帶有很多組件的網(wǎng)站一這是一個(gè)日漸普遍的模式一一都會(huì)迫使客戶(hù)去解析很多網(wǎng)站,并且頁(yè)面的加載時(shí)間也延長(zhǎng)了。
現(xiàn)代的網(wǎng)站都依賴(lài)于第三方組件提供諸如支付、嵌入式視頻、到社會(huì)媒體的鏈接、監(jiān)控等的功能。然而,每個(gè)附加組件都是一個(gè)令人擔(dān)心的失效點(diǎn),并且也是導(dǎo)致頁(yè)面加載延遲的罪魁,硬生生地剝奪了高效網(wǎng)站的優(yōu)勢(shì)。
發(fā)送請(qǐng)求
網(wǎng)絡(luò)再快,客戶(hù)與服務(wù)器之間的往返也是需要時(shí)間的,部分原因是物理學(xué)上的限制:光從紐約到拉斯維加斯需要13毫秒,那么數(shù)據(jù)從紐約到拉斯維加斯就不可能比13毫秒更快從瀏覽器到內(nèi)容之間的網(wǎng)絡(luò)速度是導(dǎo)致延遲的首要因素。
Web請(qǐng)求可能會(huì)很簡(jiǎn)單: GET index.html,然而,更為常見(jiàn)的卻是很復(fù)雜的請(qǐng)求,包括cookies、URI參數(shù),甚至還有 POSTS上載內(nèi)容的操作。請(qǐng)求包含的內(nèi)容越多,則網(wǎng)絡(luò)用來(lái)傳輸?shù)臅r(shí)間就越長(zhǎng)。假如是一個(gè)安全頁(yè)面的話,還會(huì)有另外的延遲,用來(lái)在客戶(hù)與服務(wù)器之間進(jìn)行加密協(xié)商。
再考慮響應(yīng)
請(qǐng)求到達(dá)服務(wù)器的以后,另一個(gè)導(dǎo)致延遲的罪魁就登場(chǎng)了:主機(jī)。不論是從內(nèi)存中檢索靜態(tài)對(duì)象,還是利用后臺(tái)的第三方服務(wù)來(lái)完成一個(gè)復(fù)雜的請(qǐng)求,主機(jī)延遲都會(huì)對(duì)性能造成影響。關(guān)于后臺(tái)服務(wù)造成的延遲,本書(shū)其他章節(jié)有討論,這里就不多說(shuō)了。主機(jī)延遲是造成糟糕用戶(hù)體驗(yàn)的主要原因,所以,除了在后臺(tái)對(duì)其進(jìn)行測(cè)量之外,在網(wǎng)站之外對(duì)其進(jìn)行追蹤也是非常重要的。
記住,假如網(wǎng)站依賴(lài)于第三方組件,則也要對(duì)這些外部網(wǎng)站的主機(jī)延遲進(jìn)行測(cè)量,而且還可以針對(duì)這些提供商起草一份服務(wù)水平協(xié)議(SLAs),確保他們的網(wǎng)站能夠滿足你的延遲標(biāo)準(zhǔn)。
發(fā)送響應(yīng)
響應(yīng)內(nèi)容一旦準(zhǔn)備就緒,服務(wù)器就可以通過(guò)HTTP協(xié)議發(fā)送這些請(qǐng)求對(duì)象,正是這些對(duì)對(duì)象的發(fā)送造成了訪客體驗(yàn)到的延遲。
雖然看起來(lái)似乎是帶寬一一給定時(shí)段內(nèi)客戶(hù)與服務(wù)器之間傳送的數(shù)據(jù)量一一對(duì)頁(yè)面延遲負(fù)有責(zé)任,事實(shí)上,頁(yè)面中的對(duì)象數(shù)量以及這些對(duì)象從何而來(lái),通常決定著頁(yè)面加載所花費(fèi)的時(shí)間。
Web頁(yè)面極少只包含一個(gè)對(duì)象,對(duì)于大多數(shù)頁(yè)面,容器對(duì)象(page. html)包含有對(duì)組件對(duì)象( Image.gif、 video.mo、audio.Wav、movie.Swf)的引引用,從而,這些對(duì)象也要抽取過(guò)來(lái)。而瀏覽器對(duì)于在同時(shí)能夠檢索多少對(duì)象上也是有限制的。所以,頁(yè)面加載所用時(shí)間,是對(duì)象數(shù)量、對(duì)象大小、同時(shí)能夠檢索的對(duì)象數(shù)量、可用帶寬的綜合作用。
異步通信與刷新
某些應(yīng)用包括一些客戶(hù)與服務(wù)器之間的通信,這些通信是獨(dú)立于頁(yè)面進(jìn)行的,我們?cè)谕献oogle Mapl時(shí)就會(huì)觀察到這一點(diǎn),此日時(shí)的背景拼貼就是獨(dú)立進(jìn)行的,或者在你輸入搜索條目時(shí),輸人框下面也會(huì)出現(xiàn)可供你選擇的建議列表。這些異步通信模式在Web2.0風(fēng)格的網(wǎng)站上日漸普遍。
包含某種異步更新或刷新的應(yīng)用,有不同的延遲測(cè)量指標(biāo)。我們不能再用“頁(yè)面加載時(shí)間”了,因?yàn)榇藭r(shí)流向?yàn)g覽器的是持續(xù)的更新流。取而代之的是,我們對(duì)“每秒消息數(shù)”或“刷新時(shí)間”這樣的指標(biāo)進(jìn)行測(cè)量,其中,“刷新時(shí)間”表示的是從用戶(hù)做某件事情(在鍵盤(pán)上輸入一個(gè)字符,拖動(dòng)地圖)到內(nèi)容得到刷新(建議列表被刷新,地圖被重繪)之間的延遲。
渲染時(shí)間
隨著客戶(hù)端越來(lái)越復(fù)雜,瀏覽器做的也越來(lái)越多。有可能是啟動(dòng)高互聯(lián)網(wǎng)應(yīng)用(RIA),這些RIAs都是構(gòu)建在 Flash、Flex、HTML5、Java、Javascript以.及 Silverlight之上的,也可能是運(yùn)行諸如 Quick Time及 Windows媒體播放器等這樣的插件,甚至決定如何對(duì)復(fù)雜頁(yè)面進(jìn)行布局也是需要花費(fèi)時(shí)間的。所以,對(duì)于大量依賴(lài)客戶(hù)端進(jìn)行渲染的網(wǎng)站,就必須考慮這種延遲。
好消息是,在構(gòu)建網(wǎng)站建設(shè)客戶(hù)端時(shí),可以在其中包含代碼,對(duì)延遲進(jìn)行測(cè)量,然后將數(shù)據(jù)送回給你,這樣就可以了解,對(duì)終端用戶(hù)而言,你的應(yīng)用到底怎么樣。
本文地址:http://murenxiang.com.cn//article/3343.html