dom load 服务器 文件,资源载入和页面事件 load, ready, DOMContentLoaded等

资源载入和页面事件

理想的页面载入方式

解析HTML结构。

载入并解析外部脚本。

DOM树构建完成,运行脚本。//DOMInteractive –> DOMContentLoaded

载入图片、样式表文件等外部文件。

页面载入完成。//window.onload

涉及到的事件

window.onload:

当页面全部载入完成(包含全部资源)

document.onload:

当整个html文档载入的时候就触发了。也就是在body元素载入之前就開始运行了

DOMContentLoaded:

当页面的DOM树解析好而且须要等待JS运行完才触发

DOMContentLoaded事件不直接等待CSS文件、图片的载入完成

onreadytstatechange:

当对象状态变更时触发这个事件,一旦document的readyState属性发生变化就会触发

defer和async

没有defer和async

浏览器会马上载入并运行指定的脚本,不等待兴许载入的文档元素,读到就载入并运行。

当载入脚本时会堵塞页面的渲染。

有async

载入和渲染兴许文档元素的过程将和脚本的载入与运行并行进行。体现出来就是异步。

async JS一旦下载好了就会运行,所以非常有可能不是依照原本的顺序来运行的。

假设脚本前后有依赖性。用async。就非常有可能出错。

有defer

载入兴许文档元素的过程将和脚本的载入并行进行。

可是脚本的运行要在全部元素解析完成之后。DOMContentLoaded事件触发之前完成。

defer JS在DOMInteractive后运行。一旦运行完defer JS。就会触发DOMContentLoaded。

也就是说defer脚本总是在DOMInteractive事件与DOMContentLoaded事件之间的时间运行。

defer JS在html页面解析完成之后再去运行,也就是相似于把这个脚本放在了页面底部。

DOM的载入与解析

DOMLoading

浏览器開始解析dom树的时间点

DOMInteractive

表示浏览器已经解析好dom树了。

DOMContentLoaded

同步的JS已经运行完成了。

load的实现

作用:监控整个文档(包含资源)是否载入完成。全部资源载入完成后触发

原生js写法:

window.onload = function(){

}

jquery写法:

$(document).load(function(){

});

document.ready的实现

作用:监控dom是否载入完成,dom载入完成时及资源载入之前触发

原生js写法:

document.ready = function(callback) {

if (document.addEventListener) {

document.addEventListener('DOMContentLoaded', function() {

document.removeEventListener('DOMContentLoaded', arguments.callee, false);

callback();

}, false);

}else if (document.attachEvent) {// 兼容ie

document.attachEvent('onreadytstatechange', function() {

if (document.readyState == "complete") {

document.detachEvent("onreadystatechange", arguments.callee);

callback();

}

});

}

}

下面为jquery的写法:

$(function(){

});

$(document).ready(function(){

});

//jquery中默觉得document对象

$().ready(function(){

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值