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(domContentLoaded
)但未触发先前事件的内容,应该能够推断出阶段#3(domComplete
)之后发生的事情。
因此,人们会认为“异步脚本(如果有的话,已执行)”意味着异步脚本在阶段#3之后但在事件#4之前执行。但根据我的测试,这不是发生的事情,除非我的测试是错误的。 (我试图在JSFiddle
上复制我的测试,但我无法使deferred / async脚本工作,因为无法在外部脚本上添加属性。)
所以我的问题是:domContentLoadedEventStart
和domContentLoadedEventEnd
之间发生了什么过程?
答案 0 :(得分:6)
这些时间与domContentLoaded
事件有关。它与load
和loadEventStart
的{{1}}事件类似。您可以使用loadEventEnd
。
load
例如,添加DOMContentLoaded
事件并在其中运行一些代码,应该会给您一个不同的开始和结束。
DOMContentLoaded
一旦该事件运行,导航计时API将在开始和结束时间之间返回不同的时间戳,具体取决于您的事件运行的时间。
从你指出的W3C文档中,我相信没有其他流程继续这些时间。
domContentLoadedEventStart属性
此属性必须返回用户代理在Document上触发DOMContentLoaded事件之前的时间。
domContentLoadedEventEnd属性
此属性必须在文档的DOMContentLoaded事件完成后立即返回时间。