您可以在这里看到的列表: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事件并运行其中的一些代码,应该给您一个不同的开始和结束.
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.