《高性能網(wǎng)站建設(shè)指南》閱讀筆記_規(guī)則6- 將腳本放在底部
發(fā)布時間:2013-11-22 瀏覽:386打印字號:大中小
將樣式表放在頂部這一點我想應(yīng)該沒有人反對的了,但將腳本放在底部這一點我想很多網(wǎng)站都習(xí)慣直接放在樣式下面,我們的taoche也是一樣。
如果對于小網(wǎng)站來說這樣并無所謂,但對于每天幾十萬流量的大網(wǎng)站來說,這就影響大了,就像蝴蝶效應(yīng)。
我們找個例子:
打開易車網(wǎng)的首頁,查看源代碼,我們會發(fā)現(xiàn)除了一個基本JS外,其他的腳本都是放在最底部,我又看了下汽車之家的選車也是,發(fā)現(xiàn)除了少量幾個控制樣式的js放在頂部,其他的也都放在了尾部。
前面提到對響應(yīng)時間影響的是頁面中組件的數(shù)量。當(dāng)緩存為空時,每個組件都會產(chǎn)生一個HTTP請求,有時即便緩存是完整的亦是如此。要知道瀏覽器會并行的執(zhí)行HTTP請求,大家可能會問,為什么HTTP請求的數(shù)量會影響響應(yīng)時間呢?瀏覽器不能一次將它們都下載下來嗎?對此的解釋要回到HTTP1.1規(guī)范 (我找了一個中文版的給大家),該規(guī)范建議瀏覽器從每一個主機名并行地下載兩個組件。關(guān)于瀏覽器的并行下載數(shù):瀏覽器的并行下載進(jìn)程數(shù)(firefox默認(rèn)最多為6個,IE8據(jù)說最多為8個,opera 9和Safari最多 為4個)
很多WEB頁面需要從一個主機名下載所有的組件。查看這些HTTP請求會發(fā)現(xiàn)它們是呈階梯狀的.
瀏覽器的并行下載進(jìn)程數(shù)是可以修改的,如使用Firefox中的插件FastestFox,但我們不應(yīng)該依賴用戶來修改瀏覽器設(shè)置,這個可以簡單的使用DNS別名,來將組件分別放到多個主機名中(新浪微博把這點發(fā)揮到極點–10個圖片域名)。Yahoo的研究表明,使用兩個主機名比使用1、4或10個主機名能。
腳本阻塞下載
并行下載組件的優(yōu)點是很明顯。但在下載腳本的時候并行下載實際上是被禁用——即使使用了不同的主機名,瀏覽器也不會啟動其他的下載。其中一個原因是,腳本可能使用了document.write來修改頁面內(nèi)容,因此瀏覽器會等到,以確保頁面能溝恰當(dāng)?shù)夭季帧?
正確地放置
我們使用的腳本加載時間很可能比我們預(yù)期的時間長很多,因為用戶的帶寬也回影響腳本的響應(yīng)時間。
而在我們開發(fā)過程中,很多情況我們很難講腳本移到底部。比如剛才說得腳本使用了document.write向頁面中插入了內(nèi)容,就不能將其移動到頁面中靠后的位置。
這里就出現(xiàn)了另外一種建議就是使用延遲腳本。defer屬性表明腳本不包含document.write,瀏覽器得到這一線索就可繼續(xù)進(jìn)行呈現(xiàn)。但是如果一個腳本可以延遲,那么它就一定可以移到頁面底部。而且延遲腳本只適用于IE對火狐不好使。所以底部最優(yōu)。


