小小和rizen嘗試過(guò)定位一個(gè)cache-read耗費(fèi)時(shí)間隨機(jī)的變得很長(zhǎng)的詭異問(wèn)題,排除過(guò)了文件內(nèi)容、文件類(lèi)型、文件頭等各種影響,但是很遺憾沒(méi)有最終結(jié)論。emu那天看知道這個(gè)事情后猜測(cè),會(huì)不會(huì)就是很簡(jiǎn)單的多個(gè)cache-read操作相互競(jìng)爭(zhēng)堵塞導(dǎo)致的呢?這個(gè)其實(shí)很容易驗(yàn)證了。寫(xiě)了一個(gè)簡(jiǎn)單的小頁(yè)面應(yīng)用了一組圖片,然后抓包重新打開(kāi)頁(yè)面,就看到下面這個(gè)圖了:

第一個(gè)cache-read耗時(shí)0.2秒多,第二個(gè)(并行發(fā)起)0.3秒多,第三個(gè)0.4秒多,接下去每個(gè)圖片的耗時(shí)差不多都比上一個(gè)慢0.1秒以上。結(jié)論很明顯了,并發(fā)的cache-read會(huì)相互堵塞,非常嚴(yán)重的相互堵塞。
以上抓包是在IE6下完成的。在IE7和IE8下面情況要好一些,但是問(wèn)題性質(zhì)是相同的。
很多我們?cè)?jīng)以為cache的非常好速度應(yīng)該非常快的web應(yīng)用,也許其實(shí)存在著嚴(yán)重的cache-read速度瓶頸而不為我們所知。
網(wǎng)上沒(méi)有搜到太多關(guān)于cache-read時(shí)間的文章,看來(lái)真是個(gè)盲點(diǎn)。
解決方案和網(wǎng)絡(luò)延遲是類(lèi)似的,減少cache-read請(qǐng)求,把多個(gè)小文件和小圖片合并成大文件和大圖片(而不要一廂情愿的以為小文件被瀏覽器緩存后會(huì)有很好的速度表現(xiàn)),區(qū)分優(yōu)先級(jí)引用資源。還有一個(gè)可能有用的:交錯(cuò)的發(fā)起不可避免的異步動(dòng)態(tài)網(wǎng)絡(luò)請(qǐng)求和cache-read請(qǐng)求,讓網(wǎng)絡(luò)延遲和cache-read延遲時(shí)間疊加在一起,來(lái)節(jié)省用戶實(shí)際要等待的時(shí)間。