重新認識script標簽

  • defer和asnyc(只對外部文件有效)
    • defer 在頁面完成解析時執(zhí)行代碼,這個屬性表明腳本在執(zhí)行時不會影響頁面的構(gòu)造杆融,在元素中設置這個屬性相當于告訴瀏覽器立即下載但延遲執(zhí)行
    • async 相對于頁面其他部分異步執(zhí)行腳本,一般的script標簽都是會阻塞頁面執(zhí)行的领突,沒有加上async屬性的標簽會阻塞后面的標簽的解析材彪。一般用在不需要操作dom元素的腳本上,例如一些統(tǒng)計代碼(跟頁面執(zhí)行邏輯無關的挪凑,不涉及dom操作的),可以避免因長時間加載而呈現(xiàn)白屏現(xiàn)象
  • script中有或沒有它們的區(qū)別
    • script中沒有defer和async逛艰,會立刻加載并執(zhí)行
    • script中有async沒有defer時躏碳,會與渲染后續(xù)文檔元素并行加載,加載完自動執(zhí)行
    • script中有defer沒有async時散怖,后續(xù)文檔元素渲染會與腳本文件加載并行菇绵,但是執(zhí)行所有元素解析完成之后,在DOMContentLoaded之前執(zhí)行
QQ圖片20160929092409.png

https://segmentfault.com/q/1010000000640869 這個回答很棒

  • 但是紅寶書中有這樣一句話:HTML5規(guī)范要求腳本執(zhí)行應該按照腳本出現(xiàn)的先后順序執(zhí)行镇眷,但在現(xiàn)實生活中咬最,延遲腳本并不一定按照順序執(zhí)行,也不一定會在DOMContentLoaded事件中觸發(fā)前執(zhí)行欠动,因此最好只包含一個延遲腳本永乌。因此上圖第三點說法有欠缺
Paste_Image.png

未解決問題:所有瀏覽器都兼容,那么為什么沒有看到別人在用呢具伍?

查了一下翅雏,網(wǎng)易有在用,瀏覽器兼容還是有點小問題人芽,and業(yè)務需求

  • script是可以并行下載的望几,這里應該是指放在head中的script標簽,不會阻塞其他script標簽啼肩,但是仍然會阻塞其他資源下載橄妆,例如圖片衙伶。盡管腳本的下載過程中不會相互影響,但頁面仍然要等到所有js代碼下載并完成執(zhí)行才能繼續(xù)害碾。-- 《高性能的js》

并行下載測試

Paste_Image.png
  • 建議放在body的底部
  • 每個script標簽初始化都會阻塞頁面渲染矢劲,在解析html頁面過程中每遇到一個script標簽都會因執(zhí)行腳本而導致一定的延時
  • 盡管單個較大的js文件只請求一次http,但是這樣會導致鎖死瀏覽器一段時間慌随,解決方案除了上面所說的defer之外還可以動態(tài)創(chuàng)建標簽加入head中芬沉,可以通過onload事件來監(jiān)聽腳本加載是否完畢,ie下通過readystatechange事件
function loadScript(url, callback) {

    var script = document.createElement('script');

    if ( script.readyState ) { // IE

        script.onreadystatechange = function(){

            if( script.readyState == "loaded" || script.readyState == "complete") {

                script.onreadystatechange = null; // 同時檢查兩種狀態(tài)阁猜,只要有一種觸發(fā)就刪除事件處理器丸逸,避免觸發(fā)兩次
                callback();
            }

        }

    }else{

        script.onload = function(){
            callback();
        }

    }


    script.src = url;
    document.getElementsByTagName('head')[0].appendChild(script);

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市剃袍,隨后出現(xiàn)的幾起案子黄刚,更是在濱河造成了極大的恐慌,老刑警劉巖民效,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憔维,死亡現(xiàn)場離奇詭異,居然都是意外死亡畏邢,警方通過查閱死者的電腦和手機业扒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舒萎,“玉大人程储,你說我怎么就攤上這事”矍蓿” “怎么了章鲤?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咆贬。 經(jīng)常有香客問我咏窿,道長,這世上最難降的妖魔是什么素征? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮萝挤,結(jié)果婚禮上御毅,老公的妹妹穿的比我還像新娘。我一直安慰自己怜珍,他們只是感情好端蛆,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酥泛,像睡著了一般今豆。 火紅的嫁衣襯著肌膚如雪嫌拣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天呆躲,我揣著相機與錄音异逐,去河邊找鬼。 笑死插掂,一個胖子當著我的面吹牛灰瞻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辅甥,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼酝润,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了璃弄?” 一聲冷哼從身側(cè)響起要销,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夏块,沒想到半個月后疏咐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡拨扶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年凳鬓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片患民。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡缩举,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匹颤,到底是詐尸還是另有隱情仅孩,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布印蓖,位于F島的核電站辽慕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赦肃。R本人自食惡果不足惜溅蛉,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望他宛。 院中可真熱鬧船侧,春花似錦、人聲如沸厅各。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽队塘。三九已至袁梗,卻和暖如春宜鸯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遮怜。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工淋袖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奈泪。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓适贸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親涝桅。 傳聞我的和親對象是個殘疾皇子拜姿,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

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

  • 瀏覽器中script標簽加載順序是如何的呢?這個問題折騰了好幾次了冯遂,之前弄清楚了以后蕊肥,覺得做不做筆記的無關緊要,可...
    世事如煙_f411閱讀 1,515評論 0 1
  • 本文總結(jié)一下瀏覽器在 javascript 的加載方式蛤肌。關鍵詞:異步加載(async loading)壁却,延遲加載(...
    4ea0af17fd67閱讀 1,057評論 0 2
  • JavaScript腳本對現(xiàn)代網(wǎng)站來說是必不可少的。當用戶訪問站點裸准,需要下載各種資源展东,例如JS腳本,CSS炒俱,圖片盐肃,...
    張歆琳閱讀 9,053評論 0 24
  • JavaScript基礎 按照任務中的代碼,在IE8下提示:對象不支持“addEventListener”屬性或方...
    cooore閱讀 421評論 0 0
  • 1权悟、導入框架 3砸王、導入主頭文件 4、聲明管理器和代理 5峦阁、初始化管理器 6谦铃、開啟定位服務,需要定位時調(diào)用findM...
    田亮子閱讀 746評論 0 0