onload 属性到底是资源加载完成还是渲染完成测试

测试图片加载代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
    </head>
    <script>
        alert('first');
    </script>
    <body >
            <img class="currentImg" id="currentImg" οnlοad="alert('img1')" src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1523532560732&di=f4440f7230c3ac36bd87c4cb0534d56d&imgtype=0&src=http%3A%2F%2Fc.hiphotos.baidu.com%2Fzhidao%2Fpic%2Fitem%2F35a85edf8db1cb1353fd8b78de54564e93584bc0.jpg"/>
            <img class="currentImg" id="currentImg" οnlοad="alert('img2')" src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1523532612561&di=b7a445d548cce0bb0a833e51e034e882&imgtype=jpg&src=http%3A%2F%2Fimg0.imgtn.bdimg.com%2Fit%2Fu%3D529043615%2C3919346002%26fm%3D214%26gp%3D0.jpg"/>
    </body>
    <script>
        window.onload = function(){
            alert('last')
        }
    </script>
</html>

原理:

利用alert阻断浏览器渲染

结果:

1、输出依次是 “first”、“img2”、“img1”、“last”, 竟然先加载了第二个图片,说明资源加载时并行

2、浏览器弹屏“img2”、“img1”时图片并未展示,说明onload调用时机是资源加载而非资源渲染结束后

3、去掉两个<img>中的onload属性发现弹屏“last”时图片尚未渲染,即window.onload表示资源加载而非渲染结束后调用

4、将<img>中的URL改成错误的URL发现window.onload同样调用了,但此时发现浏览器控制台已经输出了图片加载失败的error,而该<img>中的onload函数未调用

5、将两个<img>中的URL都改成错误的URL,发现window.onload同样调用了,说明其表示的是资源加载完了,至于成功与否无所谓

再测下js文件的加载

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
    </head>
    <script>
        alert('first');
    </script>
    <body >

    </body>
    <script type="text/javascript" src="../js/a.js" οnlοad="alert('javascript')"></script>
    <script>
        window.onload = function(){
            alert('last')
        }
    </script>
</html>

a.js文件的代码:

alert('js-content');

原理:

如果a.js文件中的代码执行,则1秒后会弹屏“js-content”,就利用这个特性来测试js文件的加载和运行

结果(测试结果不一致时请清除浏览器缓存)

1、依次弹屏 “first”、“js-content”、“javascript”、“last”, 说明js文件只是加载并运行后才触发script标签的onload函数

2、如果a.js文件的代码存在语法错误,如下(let 拼写错误),则依次弹屏 “first”、“javascript”、“last”,js代码不执行

alert('js-content');
le x = 0;
3、如果想提高加载效率,script标签中可以考虑使用

asyncdefer属性

备注:

IE浏览器貌似不支持onload只支持onreadystatechange事件,火狐只支持onload,不支持onreadystatechange,这个没测试过

测试环境:Chrome浏览器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值