前端性能-放腳本在頁面底部

把腳本放到頁面底部

腳本會阻塞漸進式渲染积糯,最好把腳本放到頁面的底部榜苫,這樣能確保頁面渲染正常進行并且獲取一個更好的并行下載。

腳本的問題

說明腳本帶來問題的最好方法是,來看下把腳本放在頁面中間的一個例子

http://stevesouders.com/hpws/js-middle.php

例子中那段腳本花了10秒來下載绊率,所以很容易看到問題:腳本之后的頁面內(nèi)容花了10秒才出現(xiàn)谨敛。這是由于腳本阻塞了并行下載。等我們下面介紹完瀏覽器并行下載滤否,再回來看這個問題脸狸。

例子中的另一個問題是漸進式渲染。當使用樣式的時候顽聂,漸進式渲染阻塞直到所有的樣式下載完成肥惭,這就是為什么要把所有樣式放在HEAD中,這樣他們就能被第一時間下載而不會阻塞渲染進程紊搪。對于腳本來說,文檔中位于腳本后面內(nèi)容的渲染會被阻塞全景,把腳本放在頁面底部就可以讓更多的內(nèi)容得到渲染展示耀石。

并行下載

HTTP/1.1協(xié)議中提到,它建議瀏覽器對于每一個域名一次可平行下載兩個文件爸黄。

很多web頁面下載他們的部件來自單個域名滞伟,如果一個web頁面下載它的部件來自兩個域名,那整體的響應速度會提高一倍炕贵;

限制每個域名一次并行下載2個文件是一個建議梆奈,默認狀態(tài)下,低版本的IE和firefox準從這個建議称开,但是用戶可以修改這個默認行為,提高并行下載數(shù)量亩钟;測試了下目前現(xiàn)代瀏覽器并行下載數(shù)量都要高于2;

今天大多數(shù)網(wǎng)站都基于HTTP/1.1,前端工程師可以簡單地使用CNAMEs(DNS 別名)來分離他們的部件到多個域名下鳖轰,并行下載量會帶來網(wǎng)絡帶寬和CPU資源的開銷清酥,太多的并行下載數(shù)反而會降低性能。依據(jù)雅虎的研究蕴侣,使用兩個域名比1,4或者10個會有更好的性能表現(xiàn)焰轻。

腳本阻塞并行下載

并行下載的好處顯而易見,然而昆雀,當腳本正在下載時辱志,并行下載將不能進行。瀏覽器不會開始任何其他資源的下載狞膘,即便在不同的域名下揩懒。這種行為的原因之一是腳本可能會使用document.write去輸出頁面內(nèi)容,所以瀏覽器等待以確保頁面被恰當?shù)卣故尽?/p>

另一個原因是確保腳本按恰當?shù)仨樞驁?zhí)行客冈,如果多個腳本并行下載旭从,將不能以指定的順序確保響應到達。比如,如果最后一個腳本比早出現(xiàn)在頁面的中腳本要小和悦,它可能第一個下載完成退疫,如果腳本之間沒有依賴機制,無循序得執(zhí)行他們將會導致腳本錯誤鸽素。

測試了下褒繁,目前只有IE才符合腳本阻塞并行下載的情況,火狐和chrome馍忽,腳本并不會阻塞并行下載棒坏。

不好的情況:腳本放在頁面頂部

這樣的情況下,腳本帶來的兩個影響是很清楚的:

  • 腳本之后的頁面內(nèi)容渲染會被阻塞
  • 腳本之后的部件下載會被阻塞 (目前只有IE才會)

最好的情況: 腳本放在頁面底部

最好把腳本放到頁面底部遭笋,這樣頁面的內(nèi)容渲染不會被阻塞坝冕,頁面中視覺化的部件也能盡早被下載。

defer & async

對于把腳本放到頁面底部的可以可替代方案是為頁面中引入的腳本添加defer屬性瓦呼,這會使腳本不會阻塞頁面的渲染喂窟,而是當頁面渲染完成后,腳本才有順序地執(zhí)行央串;IE對defer也支持良好

提到defer就要說下async磨澡,這也是script標簽的一個屬性,有該屬性script標簽引入的腳本质和,也不會阻塞頁面的渲染稳摄,但并不會等到頁面渲染完成再執(zhí)行,而是異步地執(zhí)行饲宿;而當存在多個async的腳本時厦酬,并不能保證他們執(zhí)行的先后順序;建議把不依賴與頁面的一些js操作使用async來引入褒傅,以幫助更快地運行弃锐。不過,IE從ie10才支持它殿托;

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末霹菊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子支竹,更是在濱河造成了極大的恐慌旋廷,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件礼搁,死亡現(xiàn)場離奇詭異饶碘,居然都是意外死亡,警方通過查閱死者的電腦和手機馒吴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門扎运,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瑟曲,“玉大人,你說我怎么就攤上這事豪治《床Γ” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵负拟,是天一觀的道長烦衣。 經(jīng)常有香客問我,道長掩浙,這世上最難降的妖魔是什么花吟? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮厨姚,結果婚禮上衅澈,老公的妹妹穿的比我還像新娘。我一直安慰自己谬墙,他們只是感情好矾麻,可當我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芭梯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弄喘。 梳的紋絲不亂的頭發(fā)上玖喘,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天,我揣著相機與錄音蘑志,去河邊找鬼累奈。 笑死,一個胖子當著我的面吹牛急但,可吹牛的內(nèi)容都是我干的澎媒。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼波桩,長吁一口氣:“原來是場噩夢啊……” “哼戒努!你這毒婦竟也來了?” 一聲冷哼從身側響起镐躲,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤储玫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后萤皂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撒穷,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年裆熙,在試婚紗的時候發(fā)現(xiàn)自己被綠了端礼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禽笑。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蛤奥,靈堂內(nèi)的尸體忽然破棺而出佳镜,到底是詐尸還是另有隱情,我是刑警寧澤喻括,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布邀杏,位于F島的核電站,受9級特大地震影響唬血,放射性物質發(fā)生泄漏望蜡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一拷恨、第九天 我趴在偏房一處隱蔽的房頂上張望脖律。 院中可真熱鬧,春花似錦腕侄、人聲如沸小泉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽微姊。三九已至,卻和暖如春分预,著一層夾襖步出監(jiān)牢的瞬間兢交,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工笼痹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留配喳,地道東北人。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓凳干,卻偏偏與公主長得像晴裹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子救赐,可洞房花燭夜當晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容