DOMContentLoaded与load

load事件
  • 图像加载完后,会触发img上的load事件
  • css文件加载完后,会触发link上的load事件
  • js文件加载完后,会触发script上的load事件
  • 图像、css文件、js文件等全部资源加载完毕后会触发body上的load事件
        document.body.onload = function(){
            console.log('body loaded');
        }

        var img = new Image();
        img.src = './doraemon.gif';
        img.onload = function(){
            console.log('img loaded');
        }
        document.body.appendChild(img);

        var link = document.createElement('link');
        link.rel = 'stylesheet';
        link.href = './index.css';
        link.onload = function(){
            console.log('css loaded');
        }
        document.querySelector('title').appendChild(link);

        var script = document.createElement('script');
        script.src='./test.js';
        script.onload = function(){
            console.log('js loaded');
        }
        document.body.appendChild(script);
DOMContentLoaded事件

load事件需要等 图像、css文件、js文件等所有资源文件加载完后方触发。DOMContentLoaded事件则不同,只要DOM树形成就会触发该事件,不需要等所有的资源文件全部加载完毕。
因此,加载一个页面时,先触发DOMContentLoaded事件,后触发load事件

        document.addEventListener('DOMContentLoaded',function(e){
            console.log('DOMContent loaded')
        })
        
        document.body.onload = function(){
            console.log('body loaded');
        }
readystatechange事件

load事件DOMContentLoaded事件都与readystatechange事件有关,涉及到document.readyState的变化。
document.readyState有5个状态,分别是

  • unintialized
  • loading
  • loaded
  • interactive
  • complete
    当然,并不是所有对象都会经历这5个状态。
        console.log(document.readyState);
        document.addEventListener('DOMContentLoaded',function(e){
            console.log('DOMContent loaded,',document.readyState);
        })

        document.body.onload = function(){
            console.log('body loaded,',document.readyState);
        }

在这里插入图片描述
开始加载页面,document.readyStateloading
形成完整DOM树后,触发DOMContentLoaded事件document.readyState变成了interactive
等所有资源全部加载完毕触发load事件时,document.readyState则是complete

性能分析

使用load事件DOMContentLoaded事件 触发的时间差 计算 资源加载时间。

//main.js
const add = (x,y) => x+y;
const sum = add(1,2);
//style.css
body{
  background-color:lightcyan
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>demo</title>
    <link rel='prefetch' href='./style.css' as='style'>
    <link rel='prefetch' href='./main.js' as='script'> 

    <link rel="stylesheet" href="./style.css">
</head>
<body>
<div id="root">hello world</div>
<script src="./main.js"></script>
<script>
    let t1,t2;
    document.addEventListener('DOMContentLoaded',(event) => {
        t1 = Date.now();
    });
    window.onload = event => {
        t2 = Date.now();
        console.log(t2-t1);
    }
</script>
</body>
</html>

当然,页面性能分析这块儿,更厉害的是window.performance

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值