100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > JavaScript异步加载 解决js阻塞

JavaScript异步加载 解决js阻塞

时间:2019-01-25 03:35:25

相关推荐

JavaScript异步加载 解决js阻塞

1.defer:

在script标签里添加defer,用于外部链接js文件,也可以异步加载内部脚本,会等待dom树生成后再执行js脚本代码

<script src="01.js" defer ></script>

2.async:

只能异步加载外部的链接文件,不能加载内部脚本,并且js文件加载完成后立即执行

<script src="01.js" async></script>

3.按需加载:

节省资源:在需要用到的时候再去引入,不需要用的时候就不管

例:点击button按钮 引入01.js并执行 01.js文件里有demo( )

btn.onclick = function(){// 创建script标签var script = document.createElement('script');script.src = '01.js'; // 子线程下载js文件// 将这个script追加到body中document.body.appendChild(script);// 事件监听方法:onload 等待页面所有资源下载完成后再执行处理函数 //如果直接调用demo(),万一js文件没有下载完,就会报错script.onload = function(){demo();}}

为了兼容ie ie不一定有onload事件

// 按需加载 封装代码function loadScript(url,callback){// 1. 创建script标签var script = document.createElement('script');// 4. 监听script是否下载完成// ie中 onreadystatechange 监听对象的状态改变if(script.readyState){// 如果当前浏览器中有readState这个属性 再去监听script标签的状态改变script.onreadystatechange = function(){// 判断script是否加载完成if(script.readyState == 'loaded' || script.readyState == 'complate'){callback();}}}else{script.onload = function(){callback();}}// 异步加载js文件 已经变了下载完成,状态不会再发生变化,所以监听事件不会被触发,所以要将这行代码写在后面script.src = url; //将标签追加到body中document.body.appendChild(script);}loadScript('01.js',demo);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。