您好,登錄后才能下訂單哦!
js加載的缺點(diǎn):加載工具方法沒必要阻塞文檔,過多js加載會(huì)影響頁面效率,一旦網(wǎng)速不好,那么整個(gè)網(wǎng)站將等待js加載而不進(jìn)行后續(xù)渲染等工作。 有些工具方法需要按需加載,用到再加載,不用不加載,。
默認(rèn)正常模式下下,JS是同步加載的,即優(yōu)先加載JS,只有當(dāng)JS文件下載完,dom和css才開始加載,當(dāng)某些時(shí)候我們需要JS異步加載,我們可以通過以下方式來設(shè)置異步加載,不同情況下選取不同方式即可
1.defer:defer
2.(h6)async:async(asynchronous) ajax(asynchronous javascript and XML)
3.除了以上兩種方法,還有一種兼容自己封裝的異步加載方式,即動(dòng)態(tài)添加script標(biāo)簽也能實(shí)現(xiàn)異步加載。
function asyncLoaded(url,callBack){/*url為js的鏈接,callBack為url的js中的函數(shù)(該函數(shù)調(diào)用應(yīng)該寫到匿名函數(shù)中,如function(){console.log(div.getScrollOffset())})*/ var script = document.createElement('script'); script.type = 'text/javascript'; /*if else 這幾句話必須要寫到這位置處,不能放最后,因?yàn)閕f中js加載中script.readyState存在好幾種狀態(tài), 只有狀態(tài)改變‘readystatechange'事件才會(huì)觸發(fā),但現(xiàn)在瀏覽器加載速度很快,當(dāng)解析到該事件時(shí)JS有可能已經(jīng)加載完, 所以事件根本不會(huì)觸發(fā),所以要寫到前面*/ if(script.readystate){//兼容IE script.onreadystatechange = function() {//狀態(tài)改變事件才觸發(fā) if(script.readyState == 'loaded' || script.readyState == 'complete'){ callBack(); script.onreadystatechange = null; } } }else{ script.onload = function(e){ callBack(); } } script.src = url; document.body.appendChild(script); }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。