js加載

1.head標(biāo)簽內(nèi)插入<script>標(biāo)簽

<script type="text/javaScript" src="test.js"></script>

這是最常見的方法,但是這個方法有個最大的問題弯洗,就是當(dāng)瀏覽器解析到<script>標(biāo)簽時能真,瀏覽器會停止解析其后的內(nèi)容赁严,而優(yōu)先下載腳本文件,并執(zhí)行其中的代碼粉铐,是個阻塞的過程疼约,這意味著,其后的test.css樣式文件和<body>標(biāo)簽都無法被加載蝙泼,由于<body>標(biāo)簽和樣式等資源無法被加載程剥,那么頁面自然就無法渲染了,因此常常頁面打開會出現(xiàn)頁面內(nèi)容空白或者樣式丟失問題汤踏,這都是在頭部引入了過多的js文件阻塞加載造成的织鲸,雖然高>版本的瀏覽器已經(jīng)可以對腳本并行加載,可是還有些瀏覽器腳本依舊是一個接一個加載的溪胶,因此優(yōu)化的話可以把js放在body標(biāo)簽最底部搂擦,這樣頁面可以先快速顯示出來,提高了體驗友好度哗脖。

2.創(chuàng)建動態(tài)腳本

var script=document.createElement('script');
script.type='text/javaScript';
script.src='test.js';
document.getElementsByTagName('head')[0].appendChild(script);

上述代碼動態(tài)創(chuàng)建了一個<script>標(biāo)簽瀑踢,并添加在<head>標(biāo)簽內(nèi),無論在何時啟動下載才避,文件的下載和執(zhí)行過程不會阻塞頁面其他內(nèi)容的加載執(zhí)行橱夭。此方法比較常見,我們常用的一些第三方庫中桑逝,很多都采用這種方式棘劣。然而這種方式有個最大的問題就是無法保證多個腳本之間的加載順序,比如我寫了一個代碼肢娘,這個代碼>要依賴于jQuery呈础,但是如果我這個文件優(yōu)先于jQuery腳本先下載完并立即執(zhí)行舆驶,這時瀏覽器會報錯——‘jQuery未定義’之類的,因為此時jQuery庫還未下載完成而钞。

3.LABjs

可以幫我們完成腳本的并行加載和按順序執(zhí)行沙廉,這也是我們公司目前用的主要方式,想要看詳細(xì)的用法去官網(wǎng)看看臼节。

$LAB.script("script1.js")
    .script("script2.js")
    .script("script3.js")
    .wait(function(){// 等待所有script加載完再執(zhí)行這個代碼塊
        script1Func();
        script2Func();
        script3Func();
    });
$LAB.script("script1.js")
    .wait()    // 空的wait()只是確保script1在其他代碼之前被執(zhí)行
    .script("script2.js")    // script2 和 script3 依賴于 script1
    .script("script3.js")
    .wait()    // 但是script2 和 script3 并不互相依賴,可以并行下載
    .script("script4.js")    //script4 依賴于 script1, script2 及 script3
    .wait(function(){script4Func();});
$LAB.script("script1.js")    // script1, script2, and script3 之間沒有依賴關(guān)系, 
    .script("script2.js")    // 所以可以任意順序執(zhí)行
    .script("script3.js")
    .wait(function(){    // 如果需要,這里當(dāng)然可以執(zhí)行javascript函數(shù)
        alert("Scripts 1-3 are loaded!");
    })
    .script("script4.js")    // 依賴于 script1, script2 及 script3 
    .wait(function(){script4Func();});

上面實例中撬陵,前面三個腳本并行加載,任意順序執(zhí)行网缝,如果有依賴并且腳本很多的話巨税,沒一個script函數(shù)后面接個wait就閑的代碼很臃腫麻煩,所以labjs庫提供了個參數(shù)可以確保下載完后順序執(zhí)行

$LAB.setOptions({AlwaysPreserveOrder:true})// 設(shè)置每個腳本之間等待
    .script("script1.js")// script1, script2, script3, script4 互相依賴
    .script("script2.js")// 并且并行下載后循序執(zhí)行
    .script("script3.js")
    .script("script4.js")
    .wait(function(){
        script4Func();
    });

這樣寫代碼精煉了很多粉臊,推薦

$LAB.script(function(){
        // `_is_IE`的值ie為true ,非ie為false
        if(_is_IE){
            return"ie.js";    // 如果是ie則這個js會被加載
        }else{
            return null;    //如果不是ie這個代碼就會被略過
        }
    })
    .script("script1.js")
  .wait();

引用:https://www.cnblogs.com/vvic/p/6518678.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末草添,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扼仲,更是在濱河造成了極大的恐慌远寸,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屠凶,死亡現(xiàn)場離奇詭異驰后,居然都是意外死亡,警方通過查閱死者的電腦和手機矗愧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門灶芝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人唉韭,你說我怎么就攤上這事夜涕。” “怎么了纽哥?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵钠乏,是天一觀的道長。 經(jīng)常有香客問我春塌,道長,這世上最難降的妖魔是什么簇捍? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任只壳,我火速辦了婚禮,結(jié)果婚禮上暑塑,老公的妹妹穿的比我還像新娘吼句。我一直安慰自己,他們只是感情好事格,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布惕艳。 她就那樣靜靜地躺著搞隐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪远搪。 梳的紋絲不亂的頭發(fā)上劣纲,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音谁鳍,去河邊找鬼癞季。 笑死,一個胖子當(dāng)著我的面吹牛倘潜,可吹牛的內(nèi)容都是我干的绷柒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼涮因,長吁一口氣:“原來是場噩夢啊……” “哼废睦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起养泡,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤嗜湃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瓤荔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體净蚤,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年输硝,在試婚紗的時候發(fā)現(xiàn)自己被綠了今瀑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡点把,死狀恐怖橘荠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情郎逃,我是刑警寧澤哥童,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站褒翰,受9級特大地震影響贮懈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜优训,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一朵你、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧揣非,春花似錦抡医、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽大脉。三九已至,卻和暖如春水孩,著一層夾襖步出監(jiān)牢的瞬間镰矿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工荷愕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留衡怀,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓安疗,卻偏偏與公主長得像抛杨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子荐类,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

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

  • 面對開發(fā)者的瀏覽器的Js性能可以說怖现,最重要的是可用性問題。這個問題是復(fù)雜的玉罐,因為Js的阻塞特性百匆,換句話說當(dāng)Js代碼...
    Addy_Zhou閱讀 813評論 0 1
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5监嗜? 答:HTML5是最新的HTML標(biāo)準(zhǔn)卒暂。 注意:講述HT...
    kismetajun閱讀 27,518評論 1 45
  • 瀏覽器的主要功能是將用戶選擇的web資源呈現(xiàn)出來激率,它需要從服務(wù)器請求資源,并將其顯示在瀏覽器窗口中季蚂,資源的格式通常...
    一只dororo閱讀 687評論 0 1
  • 1.js放在head中會立即執(zhí)行茫船,阻塞后續(xù)的資源下載與執(zhí)行。因為js有可能會修改dom扭屁,如果不阻塞后續(xù)的資源下載算谈,...
    白屏閱讀 717評論 3 50
  • 路過一棵開花的樹花雨從頭頂飛灑下來它們寂寥,清冷在白晝的光里在小風(fēng)的撫摸中垂落大地 滿樹的花料滥,如愛到荼靡它們一生只...
    Bohemian_e6af閱讀 279評論 0 4