js的延迟加载

js的延迟加载一般用于提升页面的加载速度,通常情况下有以下几种方式:

1.通过script的标签async
<script src="a.js"></script>
<script src="b.js" async="async"></script>
<script src="c.js"></script>

async标签表示应该立即下载b.js,但是同时不妨碍浏览器下载其他资源,也就是不阻塞浏览器执行其他操作。
但是会在下载结束后立即执行,同时会在windows的load事件前执行,所以会出现执行顺序被打乱的情况。
所以不推荐使用。
正常执行顺序 a.js =>b.js=>c.js
加入async的执行顺序a.js和c.js的顺序不变,但是b.js会在下载完毕后立即执行。

2.通过script的标签defer
<script src="a.js"></script>
<script src="b.js" defer="defer"></script>
<script src="c.js"></script>

defer标签痛async标签一样的地方是都不会阻塞页面的渲染加载。
不同与在于defer是立即下载但是不会在下载完毕后就执行,而是等到html标签结束后才执行。
不会打乱,而是会按照原有的顺序执行js。
正常执行顺序 a.js =>b.js=>c.js
加入defer的执行顺序a.js =>c.js=>b.js
只是下载的时候相当于异步下载。

3.动态添加

原理和前两种一样。

(function(){
	 var scriptEle = document.createElement("script");
	 scriptEle.type = "text/javasctipt";
	 scriptEle.async = true;
	 scriptEle.src = "http://cdn.bootcss.com/jquery/3.0.0-beta1/jquery.min.js";
	 var x = document.getElementsByTagName("head")[0];
	 x.insertBefore(scriptEle, x.firstChild); 
 })();
4.通过setTimeout进行延迟加载

emmm网上都有很多说这种方法,不过经测试这样没什么用,虽然引入了,但是a.js里面的代码根本不执行。不知道是不是我的理解有错。如果哪位知道的能留言告知就最好了,谢谢。

<script src="" id="last"></script>
<script>
	var last = document.getElementById('last')
	setTimeout(function(){
		last.src = 'a.js'
	}, 1000)
</script> 
其他方法

肯定还有其他办法,当然常用的应该就是这几种办法了。
ps: 一般情况下,我们都将script标签放在</body>前面,防止阻塞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值