©
本文档使用 PHP中文网手册 发布
传统上,在浏览器中,HTML解析器已经在主线程上运行,并在</script>
标记后被阻塞,直到脚本从网络中检索并执行。Firefox 4及更高版本中的HTML解析器支持对主线程进行推测性解析。在脚本被下载和执行时,它会提前解析。与Firefox 3.5和3.6中一样,HTML解析器会为流中发现的脚本,样式表和图像启动推测加载。但是,在Firefox 4及更高版本中,HTML解析器还推测性地运行HTML树构建算法。好处在于,当推测成功时,不需要重新分析已经扫描的用于脚本,样式表和图像的传入文件的部分。不利的一面是,当投机失败时,失去更多的工作。
这份文件可以帮助您避免那些使猜测失败并减缓页面加载速度的对象。
只有一个规则可以使链接脚本,样式表和图像的投机加载成功:
如果使用<base>
元素来覆盖页面的基本URI,请将该元素放置在文档的非脚本部分中。不要通过document.write()
或添加它document.createElement()
。
当document.write()
更改树构建器状态时,推测树构建失败,使得</script>
标记之后的推测状态在document.write()
解析所有插入的内容时不再成立。但是,只有不寻常的用途document.write()
会造成麻烦。以下是要避免的事情:
不要写不平衡的树。<script>document.write("<div>");</script>
不好。<script>document.write("<div></div>");</script>
没问题。
不要写未完成的标记。<script>document.write("<div></div");</script>
不好。
不要以回车完成你的编码。<script>document.write("Hello World!\r");</script>
不好。<script>document.write("Hello World!\n");</script>
没问题。
请注意,写入平衡标签可能会导致其他标签被推断,导致写入不平衡。例如<script>document.write("<div></div>");</script>
,head
元素内部将被解释为<script>document.write("</head><body><div></div>");</script>
不平衡。
不要格式化表格的一部分。<table><script>document.write("<tr><td>Hello World!</td></tr>");</script></table>
不好。但是,<script>document.write("<table><tr><td>Hello World!</td></tr></table>");</script>
没关系。
TODO:其他格式化元素内的document.write。