摘要:盡管腳本的下載過(guò)程中不會(huì)相互影響,但頁(yè)面仍然要等到所有代碼下載并完成執(zhí)行才能繼續(xù)。
defer和asnyc(只對(duì)外部文件有效)
defer 在頁(yè)面完成解析時(shí)執(zhí)行代碼,這個(gè)屬性表明腳本在執(zhí)行時(shí)不會(huì)影響頁(yè)面的構(gòu)造,在元素中設(shè)置這個(gè)屬性相當(dāng)于告訴瀏覽器立即下載但延遲執(zhí)行
async 相對(duì)于頁(yè)面其他部分異步執(zhí)行腳本,一般的script標(biāo)簽都是會(huì)阻塞頁(yè)面執(zhí)行的,沒(méi)有加上async屬性的標(biāo)簽會(huì)阻塞后面的標(biāo)簽的解析。一般用在不需要操作dom元素的腳本上,例如一些統(tǒng)計(jì)代碼(跟頁(yè)面執(zhí)行邏輯無(wú)關(guān)的,不涉及dom操作的),可以避免因長(zhǎng)時(shí)間加載而呈現(xiàn)白屏現(xiàn)象
script中有或沒(méi)有它們的區(qū)別
script中沒(méi)有defer和async,會(huì)立刻加載并執(zhí)行
script中有async沒(méi)有defer時(shí),會(huì)與渲染后續(xù)文檔元素并行加載,加載完自動(dòng)執(zhí)行
script中有defer沒(méi)有async時(shí),后續(xù)文檔元素渲染會(huì)與腳本文件加載并行,但是執(zhí)行所有元素解析完成之后,在DOMContentLoaded之前執(zhí)行
https://segmentfault.com/q/10... 這個(gè)回答很棒
但是紅寶書(shū)中有這樣一句話:HTML5規(guī)范要求腳本執(zhí)行應(yīng)該按照腳本出現(xiàn)的先后順序執(zhí)行,但在現(xiàn)實(shí)生活中,延遲腳本并不一定按照順序執(zhí)行,也不一定會(huì)在DOMContentLoaded事件中觸發(fā)前執(zhí)行,因此最好只包含一個(gè)延遲腳本。因此上圖第三點(diǎn)說(shuō)法有欠缺
未解決問(wèn)題:所有瀏覽器都兼容,那么為什么沒(méi)有看到別人在用呢?
查了一下,網(wǎng)易有在用,瀏覽器兼容還是有點(diǎn)小問(wèn)題,and業(yè)務(wù)需求
script是可以并行下載的,這里應(yīng)該是指放在head中的script標(biāo)簽,不會(huì)阻塞其他script標(biāo)簽,但是仍然會(huì)阻塞其他資源下載,例如圖片。盡管腳本的下載過(guò)程中不會(huì)相互影響,但頁(yè)面仍然要等到所有js代碼下載并完成執(zhí)行才能繼續(xù)。-- 《高性能的js》
并行下載測(cè)試
建議放在body的底部
每個(gè)script標(biāo)簽初始化都會(huì)阻塞頁(yè)面渲染,在解析html頁(yè)面過(guò)程中每遇到一個(gè)script標(biāo)簽都會(huì)因執(zhí)行腳本而導(dǎo)致一定的延時(shí)
盡管單個(gè)較大的js文件只請(qǐng)求一次http,但是這樣會(huì)導(dǎo)致鎖死瀏覽器一段時(shí)間,解決方案除了上面所說(shuō)的defer之外還可以動(dòng)態(tài)創(chuàng)建標(biāo)簽加入head中,可以通過(guò)onload事件來(lái)監(jiān)聽(tīng)腳本加載是否完畢,ie下通過(guò)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; // 同時(shí)檢查兩種狀態(tài),只要有一種觸發(fā)就刪除事件處理器,避免觸發(fā)兩次 callback(); } } }else{ script.onload = function(){ callback(); } } script.src = url; document.getElementsByTagName("head")[0].appendChild(script); }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/80553.html
摘要:和可以用來(lái)指定資源是最高優(yōu)先級(jí)的。如果用戶進(jìn)入指定的鏈接,隱藏的這個(gè)頁(yè)面就會(huì)進(jìn)入馬上進(jìn)入用戶的視線。微軟最近也宣布會(huì)讓在上用類似的技術(shù)。 預(yù)加載 現(xiàn)在的網(wǎng)絡(luò)情況雖然很樂(lè)觀,但是 defer和async 當(dāng)瀏覽器碰到 script 腳本的時(shí)候: 沒(méi)有 defer 或 async,瀏覽器會(huì)立即加載并執(zhí)行指定的腳本,立即指的是在渲染該 script 標(biāo)簽之下的文檔元素之前,也就是說(shuō)不等待后...
摘要:了解擴(kuò)展程序開(kāi)發(fā)本文大量借鑒圖靈電子書(shū)擴(kuò)展及應(yīng)用開(kāi)發(fā)首發(fā)版首先,我嘗試來(lái)用簡(jiǎn)單幾句話描述一下擴(kuò)展程序擴(kuò)展主要用于對(duì)瀏覽器功能的增強(qiáng),它強(qiáng)調(diào)與瀏覽器相結(jié)合。提供了接口,允許擴(kuò)展對(duì)用戶的歷史進(jìn)行管理。 了解Chrome擴(kuò)展程序開(kāi)發(fā) 本文大量借鑒圖靈電子書(shū)-Chrome擴(kuò)展及應(yīng)用開(kāi)發(fā)(首發(fā)版) 首先,我嘗試來(lái)用簡(jiǎn)單幾句話描述一下Chrome擴(kuò)展程序: Chrome擴(kuò)展主要用于對(duì)瀏覽器功能的增...
摘要:應(yīng)用日益復(fù)雜,模塊化已經(jīng)成為一個(gè)迫切需求。異步模塊加載機(jī)制。引用的資源列表太長(zhǎng),懶得回調(diào)函數(shù)中寫一一對(duì)應(yīng)的相關(guān)參數(shù)假定這里引用的資源有數(shù)十個(gè),回調(diào)函數(shù)的參數(shù)必定非常多這就是傳說(shuō)中的 簡(jiǎn)述 緣起 模塊通常是指編程語(yǔ)言所提供的代碼組織機(jī)制,利用此機(jī)制可將程序拆解為獨(dú)立且通用的代碼單元。 模塊化主要是解決代碼分割、作用域隔離、模塊之間的依賴管理以及發(fā)布到生產(chǎn)環(huán)境時(shí)的自動(dòng)化打包與處理等多個(gè)方面...
原文博客 閑扯 很久以前,自己擁有一個(gè)用hexo搭建的靜態(tài)博客網(wǎng)站:ox:,記得當(dāng)時(shí)為了把它搞出來(lái),廢了不少勁:anger:,然后后來(lái)又?jǐn)鄶嗬m(xù)續(xù)更改過(guò)一些配置和樣式,但是因?yàn)楦杏X(jué)各種麻煩,所以就放在github上積累和很多的塵土:cupid:,到現(xiàn)在也懶得在打掃了(其實(shí)是好久不用,有點(diǎn)忘了怎么用了:-1::poop:),前段時(shí)間在百度統(tǒng)計(jì)上看了看那個(gè)靜態(tài)網(wǎng)站的訪問(wèn)人數(shù),發(fā)現(xiàn)已經(jīng)很久很久沒(méi)人訪問(wèn)過(guò)了...
摘要:那么我們?nèi)绾卧诓┛椭袑?shí)現(xiàn)這個(gè)功能呢,其實(shí)很簡(jiǎn)單,首先修改我們的文件介紹正在使用的構(gòu)造函數(shù)附加到根實(shí)例的一些選項(xiàng)當(dāng)前應(yīng)用的路由實(shí)例站點(diǎn)元數(shù)據(jù)對(duì)的判斷是防止編譯的時(shí)候報(bào)錯(cuò)然后新建一個(gè)的文件取消默認(rèn)的復(fù)制事件作者靜水深流原文著作權(quán)歸作者所有。 原文博客 閑扯 很久以前,自己擁有一個(gè)用hexo搭建的靜態(tài)博客網(wǎng)站,記得當(dāng)時(shí)為了把它搞出來(lái),廢了不少勁,然后后來(lái)又?jǐn)鄶嗬m(xù)續(xù)更改過(guò)一些配置和樣式,但是因...
閱讀 2589·2021-11-24 09:38
閱讀 2615·2019-08-30 15:54
閱讀 934·2019-08-30 15:52
閱讀 1918·2019-08-30 15:44
閱讀 2726·2019-08-30 13:48
閱讀 778·2019-08-29 16:21
閱讀 1008·2019-08-29 14:03
閱讀 2223·2019-08-28 18:15