Javascript 试图理解W3C关于延迟和异步的规范?

Javascript 试图理解W3C关于延迟和异步的规范?,javascript,html,asynchronous,w3c,deferred,Javascript,Html,Asynchronous,W3c,Deferred,见: 该链接将为您提供有关延迟和异步的W3C规范。他们说: 如果两个属性都不存在,则在用户代理继续解析页面之前,将立即获取并执行脚本 如果您有例如script.js,那么您可以使用它执行以下操作: 下载文件 从缓存中获取文件 读取它,因为在实际执行代码之前,必须读取文件中的所有代码,否则将不存在 执行代码 我的英语不是很好,所以我现在正在考虑这个词 如果两个属性都不存在,则立即获取并执行脚本 我看到的是: 浏览器可以从缓存中获取script.js 浏览器可以下载script.js 是这样吗?所以

见:

该链接将为您提供有关延迟和异步的W3C规范。他们说:

如果两个属性都不存在,则在用户代理继续解析页面之前,将立即获取并执行脚本

如果您有例如script.js,那么您可以使用它执行以下操作:

下载文件 从缓存中获取文件 读取它,因为在实际执行代码之前,必须读取文件中的所有代码,否则将不存在 执行代码 我的英语不是很好,所以我现在正在考虑这个词

如果两个属性都不存在,则立即获取并执行脚本

我看到的是:

浏览器可以从缓存中获取script.js 浏览器可以下载script.js 是这样吗?所以他们使用的是fetched,因为如果你说download,那么它不包括缓存吗

我想讨论非缓存情况,因此在这种情况下:

如果两个属性都不存在,则立即下载并执行脚本

我可以这么说吗?如果是的话,我还有最后一个问题

现代浏览器有预加载扫描仪,可以扫描javascript文件以便提前下载。所以我想:在HTML解析器到达脚本标记之前,预加载扫描程序可能已经完成了js文件的下载。因此,当浏览器已经完成下载时,HTML解析器可以忙于处理脚本标记之前的其他HTML

到目前为止这是真的吗?我自己也不确定。但如果这是真的,那么我不理解W3C规范,因为他们说如果之前的一切都是真的:

如果两个属性都不存在,则立即下载并执行脚本

下载后立即执行?如果您处于同步环境中,那么在执行JavaScript之前,该脚本标记之前的所有html都必须在DOM中

所以如果所有这些都是真的,那么我不明白为什么他们会说:立即执行?或者预加载扫描程序是非官方的,所以W3C在他们的文档中忽略了这一点。那么,在这种情况下,W3C规范实际上只适用于较旧的浏览器? 或者浏览器是否可以从预加载扫描程序中获取脚本,而这将发生在HTML解析器位于脚本标记处的那一刻,也许我必须这样看


或者我该如何看待这一点?

有一个完整的标准精确地描述了抓取的含义

除了缓存和下载,还必须考虑服务人员的行为。本质上,通过立即执行,这意味着如果缺少async和defer属性,那么当解析器遇到end标记时,必须在DOM上执行脚本。脚本运行时,解析器暂停,并且仅在脚本完成运行后才恢复


预加载扫描程序可能导致脚本下载,但不会运行。这意味着,如果解析器实际处理脚本元素并运行其脚本,脚本将在缓存中或途中可用。

对于负面评价的人:什么不清楚,没有用处,或者我如何做更多的研究工作?这只是一个我不明白的问题,只需按下一个按钮,没有任何争论,就很容易了。所以告诉我我的问题出了什么问题,我会修改它,让你更清楚。或者预加载扫描仪是非官方的,所以W3C在他们的文档中忽略了这一点。-是的,预加载扫描程序是针对脚本不注入任何内容的常见情况的解析器优化。这是一个实现细节,可能会记录在浏览器手册中,但它与规范无关。谢谢!我想我可以接受;。immidally这个词对我来说有点混淆,所以immidally与抓取无关,但它更与html解析器有关,遇到end标记?因此,如果您在JavaScript代码中检查DOM,您将看到脚本标记已经在DOM中,而代码仍在运行?是的,您将看到。