JavaScript – 导航定时API. domContentLoadedEventStart和domContentLoadedEventEnd之间发生了什么?

前端之家收集整理的这篇文章主要介绍了JavaScript – 导航定时API. domContentLoadedEventStart和domContentLoadedEventEnd之间发生了什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
W3C指定一个事件列表及其相应的用户代理必须返回的时间,如果他们想支持 Navigation Timing API.

您可以在这里看到的列表:http://www.w3.org/TR/navigation-timing/#process

了解哪一个过程涉及哪些事件在大多数情况下相当简单.但是,有一件事情,我不知道domContentLoadedEventStart和domContentLoadedEventEnd之间发生了什么.

这是我迄今为止所了解的,并且基于我的思考:

> domLoading // UA开始解析文档.
> domInteractive // UA已经完成解析文档.用户
可以与页面进行交互.
> domContentLoaded //该文档已经完全加载
解析和延迟脚本(如果有)已执行. (异步脚本,
如果有的话,可能或可能不会执行???)
> domComplete // DOM树是完全构建的.异步脚本,如果
任何,已执行.
> loadEventEnd // UA有一个完整的页面.所有资源,
像图像,swf等已经加载.

应该能够通过理解触发的事件#4(domComplete)但是没有触发先前的事件来推断出第3阶段(domContentLoaded)之后发生了什么.

所以人们会认为“Async脚本(如果有的话)已经执行”意味着异步脚本在阶段#3之后但事件#4之前被执行.但是根据我的测试,这不是发生了,除非我的测试是错误的. (我试图复制我在JSFiddle上的测试,但是我不能使得所谓的/异步脚本工作,因为没有办法在外部脚本添加属性.)

所以我的问题是:domContentLoadedEventStart和domContentLoadedEventEnd之间发生什么过程?

解决方法

这些时间与domContentLoaded事件有关.这与loadEventStart和loadEventEnd的load事件相似.而不是使用负载,您使用DOMContentLoaded.

例如,添加DOMContentLoaded事件并运行其中的一些代码,应该给您一个不同的开始和结束.

document.addEventListener("DOMContentLoaded",function(event) {
    var j = 0;
    for (var i = 0; i < 10000000; i++) {
        j = i;
    }
});

一旦该事件运行,导航定时API将在开始和结束时间之间返回不同的时间戳,具体取决于事件运行多长时间.

从您指出的W3C文档中,我相信这些时间没有其他的进程.

domContentLoadedEventStart attribute

This attribute must return the time immediately before the user agent fires the DOMContentLoaded event at the Document.

domContentLoadedEventEnd attribute

This attribute must return the time immediately after the document’s DOMContentLoaded event completes.

猜你在找的JavaScript相关文章