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


