在spec:
第三个是一个标志,表明该元素是否会"非阻塞"。最初,脚本元素必须设置此标志。 HTML解析器和它们插入的脚本元素上的XML解析器没有设置它。另外,每当一个脚本元素的"非阻塞"标志设置添加了异步内容属性,元素的"非阻塞"标志必须是未设置的。
抱歉,我无法理解这意味着什么。有一些问题:
1
第三个是一个标志,表明该元素是否会"非阻塞"。最初,脚本元素必须设置此标志
"首先"表示HTMLScriptElement class
中有一个名为non-blocking
且默认为true
的属性,或者在HTML解析器分析之前创建或实例化脚本元素时它意味着它是true
?
2
HTML解析器和它们插入的脚本元素上的XML解析器没有设置。
"插入"表示脚本元素是使用document.write
还是insert操作插入文档的?
3
另外,每当一个脚本元素的"非阻塞"标志设置添加了异步内容属性,元素的"非阻塞"标志必须是未设置的。
async
的{{1}}链接,但有一个单词&#34; content&#34;,它究竟意味着什么?从服务器或本地获取的属性或内容?< / p>
如果它意味着内容,它是否代表HTML Parser会在添加异步内容之前继续解析脚本元素的后续字节?(我写了一些测试,我认为这是错误的)
4.最重要的是,&#34;非阻塞&#34;就像我们通常谈论的那样意味着没有阻止IO,获取资源,更新布局,重新绘制等等?或者还有其他意义?规范说&#34;最初,脚本元素必须设置此标志&#34;但是我们认为script
是&#34;阻止&#34;(确切地说是在执行时),所以当我第一次阅读这篇文章时我很怀疑。现在可以有人澄清我的怀疑吗?
5.最后,是否有任何实现(我的意思是src代码可以方便地调试)规范?我认为基于chrome更好,对不起,我不是说别人不好,只是因为我只安装chrome。
答案 0 :(得分:1)
我没有遵循这个区别。这些实现选择了哪些功能差异?
插入操作。 document.write
未插入到文档中。它将字符注入解析器处理的输入字节流中。
在HTML5规范中,有两种类型的“属性”。 “内容属性”和“IDL属性”。 “内容属性”是您在标记中添加的内容:<script async>
是异步内容属性。大多数人认为“IDL属性”是JavaScript myScriptElement.async
中的属性。
这意味着不会阻止解析器线程。解析器从输入流中获取字符并创建元素,文本节点对象等。当解析器被阻止时,它会停止从输入流中消耗字符。 (虽然它可能会在输入流中预测它是否会被要求获取其他资源,并且无论如何都会推测性地获取它们)。当看到</script>
标记时,如果未设置非阻塞标记,则解析器将不会消耗当前输入流中的任何其他字符,直到获取并运行该脚本为止。这允许脚本包含document.write
以将字符注入到输入流中,以便接下来解析它们。
Chrome(闪烁)和Firefox(壁虎)都是开源的,但我个人并没有尝试过任何细节检查任何代码库,所以不能告诉它们有多困难。无论如何,这可能是个人偏好。