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>
前面,防止阻塞。