2021-05-10

JS同步加载以及异步加载的三种方式

同步加载就是一种我们最常用的一种方式。这种加载方式带来的一种影响就是会导致页面阻塞。因为js中有输出document内容、修改dom、重定向等行为,就会造成页面堵塞。所以建议是把script标签写在body的后面。尽量避免这种阻塞带来的影响。

异步加载

1.defer的用法-以前适用于IE,写在可以在主流浏览器上使用。

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

defer可以直接在script标签上使用。他的属性值也就他自己一个,所以也可以直接写。
这个属性规定是否对脚本进行延迟加载,直到页面加载完成为止。
添加这个属性后,js脚本按照脚本声明顺序执行。

2.async-h5新增属性
async-用法和defer类似,但是async这个属性只适用于外部去引用脚本,即script要有scr属性才能去使用。

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


不同的是,添加async属性后,js脚本是乱序执行的,不管声明的顺序如何,只要某个js脚本加载完就立即执行.

3.按需加载
就是在script标签中 插入到dom中
这样所有的js脚本都会在onload事件后才加载,onload事件会在所有文件内容(包括文本、图片、CSS文件等)加载完成后才开始执行,极大的优化了网页的加载速度。

```javascript
 // 3. 按需加载  
        动态创建script标签  
        var script = docuemnt.createElement('script');
        已经开始下载文件
        script.src = 'test.js'
        // 等到所有的 html文件解析和加载完成之后
        document.body.appenChild(script);
        // ie中有很多监听 readyState  文件加载完成
        script.readyState = 'complate'
        script.readyState = 'loaded' 
        // 监听状态变化  兼容ie的写法
        script.onreadystatechange = function(){
            if(script.readyState == 'complate' || script.readyState == 'loaded' ){
                test();
            }
        }

        if(script.readyState){
            script.onreadystatechange = function(){
                if(script.readyState == 'complate' || script.readyState == 'loaded' ){
                    test();
                }
            }
        }else{
            script.onload = function(){  //加载完成去执行代码  ie中不能使用
                test();
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值