导航计时API。 domContentLoadedEventStart和domContentLoadedEventEnd之间发生了什么?

时间:2014-02-14 21:42:41

标签: javascript dom

W3C指定用户代理如果要支持Navigation Timing API则必须返回的事件列表及其对应的时间。

您可以在此处看到一个列表:http://www.w3.org/TR/navigation-timing/#process

在大多数情况下,了解哪个过程与哪些事件相关。但有一点让我感到困惑的是domContentLoadedEventStartdomContentLoadedEventEnd之间正在发生的事情。

这是我到目前为止所理解的,并以我的思考为基础:

  1. domLoading // UA开始解析文档。
  2. domInteractive // UA已完成解析文档。用户 可以与页面进行交互。
  3. domContentLoaded //文档已完全加载 已解析和延迟的脚本(如果有)已执行。 (异步脚本, 如果有的话,可能会或可能不会执行???)
  4. domComplete //完全构建了DOM树。异步脚本,如果 任何,已经执行。
  5. loadEventEnd // UA有一个完整的页面。所有资源, 像图像,swf等已经加载。
  6. 通过了解触发事件#4(domContentLoaded)但未触发先前事件的内容,应该能够推断出阶段#3(domComplete)之后发生的事情。

    因此,人们会认为“异步脚本(如果有的话,已执行)”意味着异步脚本在阶段#3之后但在事件#4之前执行。但根据我的测试,这不是发生的事情,除非我的测试是错误的。 (我试图在JSFiddle上复制我的测试,但我无法使deferred / async脚本工作,因为无法在外部脚本上添加属性。)

    所以我的问题是:domContentLoadedEventStartdomContentLoadedEventEnd之间发生了什么过程?

1 个答案:

答案 0 :(得分:6)

这些时间与domContentLoaded事件有关。它与loadloadEventStart的{​​{1}}事件类似。您可以使用loadEventEnd

,而不是使用load

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

DOMContentLoaded

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

从你指出的W3C文档中,我相信没有其他流程继续这些时间。

  

domContentLoadedEventStart属性

     

此属性必须返回用户代理在Document上触发DOMContentLoaded事件之前的时间。

     

domContentLoadedEventEnd属性

     

此属性必须在文档的DOMContentLoaded事件完成后立即返回时间。