《高性能JavaScript》讀書總結(jié)——JS加載和執(zhí)行

隨著前端技術(shù)的不斷發(fā)展诈唬,JS在web應(yīng)用中的作用越來(lái)越來(lái)大夺蛇,同時(shí)也意味著JS越來(lái)越成為前端的瓶頸该面。寫出高性能的JS代碼卡乾,也成為了前端開發(fā)者必備的技能翼悴。這里分享一下《高性能JavaScript》的讀書心得,以便大家更好的理解JS幔妨,寫出更高效的JS代碼鹦赎。

JS加載和執(zhí)行

JS的加載

  1. 地球人都知道,為了不阻塞頁(yè)面的加載和渲染误堡,JS文件一般放在html的底部加載古话。
  2. 減少加載的JS腳本數(shù)量,一般采用合并文件的方式
  3. 減小JS文件大小锁施,壓縮JS文件陪踩,開啟GZIP壓縮

無(wú)阻塞的腳本

避免一次加載一個(gè)很大的JS文件杖们,避免阻塞瀏覽器。主要采用延遲加載技術(shù)肩狂,具體實(shí)現(xiàn)方法包括:

  1. 利用script標(biāo)簽的延遲加載屬性defer(需注意兼容性摘完,可以在上查看)
<script type="text/javascript" src="file1.js" defer></script>

帶有defer屬性的script標(biāo)簽,可以放在文檔的任何位置傻谁。對(duì)應(yīng)的JS文件將在script標(biāo)簽解析時(shí)下載孝治,但代碼不會(huì)被執(zhí)行,直到DOM加載完成(onload事件觸發(fā)之前)才會(huì)執(zhí)行栅螟。JS文件下載時(shí)不會(huì)阻塞頁(yè)面的其他處理過(guò)程荆秦。

  1. 動(dòng)態(tài)創(chuàng)建script元素,通過(guò)src加載腳本
var script= document.createElement ("script");
script.type= "text/javascript";
script.src= "file1.js";
document.getElementsByTagName("head")[0].appendChild(script)

特點(diǎn):無(wú)論在何處啟動(dòng)下載,文件的下載和運(yùn)行都不會(huì)阻塞頁(yè)面的其他處理過(guò)程力图。如需控制狂態(tài)和加載順序步绸,需要自己添加監(jiān)聽事件處理.

//Internet Explorer
script.onreadystatechange =function(){...}
//Firefox,Opera, Chrome,Safari3+
script.onload = function(){...}
  1. XMLHttpRequest腳本注入,通過(guò)XHR獲取JS字符串吃媒,填入script元素瓤介。
var xhr= newXMLHttpRequest();
xhr.open("get","file1.js",true);
xhr.onreadystatechange= function(){
    if (xhr.readyState==4){
        if (xhr.status>=200&&xhr.status<300|| xhr.status== 304){
            varscript= document.createElement("script");
            script.type= "text/javascript";
            script.text= xhr.responseText;
            document.body.appendChild(script);
        }
    }
};
xhr.send(null)

特點(diǎn):下載后可以不用立即添加script元素,從而控制執(zhí)行時(shí)間赘那。

推薦的無(wú)阻塞模式

先加載必要的JS文件刑桑,然后再執(zhí)行l(wèi)oad函數(shù),再加載其他功能所需的腳本募舟。

<script type="text/javascript" src="loader.js"></script>
<script type="text/javascript">
    loadScript("the-rest.js",function(){
        Application.init();
    });
</script>

目前各主流的延遲加載類庫(kù)祠斧,也是采用這些技術(shù)。比如拱礁,圖片懶加載琢锋,動(dòng)態(tài)給img元素的src賦值。requireJS是使用動(dòng)態(tài)創(chuàng)建script元素實(shí)現(xiàn)的呢灶。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吴超,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鸯乃,更是在濱河造成了極大的恐慌鲸阻,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缨睡,死亡現(xiàn)場(chǎng)離奇詭異鸟悴,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)宏蛉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門遣臼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人拾并,你說(shuō)我怎么就攤上這事揍堰∨羟常” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵屏歹,是天一觀的道長(zhǎng)隐砸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蝙眶,這世上最難降的妖魔是什么季希? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮幽纷,結(jié)果婚禮上式塌,老公的妹妹穿的比我還像新娘。我一直安慰自己友浸,他們只是感情好峰尝,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著收恢,像睡著了一般武学。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伦意,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天火窒,我揣著相機(jī)與錄音,去河邊找鬼驮肉。 笑死熏矿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的离钝。 我是一名探鬼主播曲掰,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼奈辰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起乱豆,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奖恰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后宛裕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瑟啃,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年揩尸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蛹屿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岩榆,死狀恐怖错负,靈堂內(nèi)的尸體忽然破棺而出坟瓢,到底是詐尸還是另有隱情,我是刑警寧澤犹撒,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布折联,位于F島的核電站,受9級(jí)特大地震影響识颊,放射性物質(zhì)發(fā)生泄漏诚镰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一祥款、第九天 我趴在偏房一處隱蔽的房頂上張望清笨。 院中可真熱鬧,春花似錦刃跛、人聲如沸抠艾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)跌帐。三九已至,卻和暖如春绊率,著一層夾襖步出監(jiān)牢的瞬間谨敛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工滤否, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脸狸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓藐俺,卻偏偏與公主長(zhǎng)得像炊甲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子欲芹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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