技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

Firefox开发者:document.write()使用不当导致网页解析错误

作者:admin    时间:2013-10-21 11:19:31    浏览:

我们在编写html代码时,有时会通过js来操作html,document.write()的使用率还是挺高的。不过,通过今天的发现,看了Firefox开发者的一篇文章之后,了解到原来document.write()是不可以随便写,在使用document.write()时需要注意一些事项,否则会引起解析器对标签的错误解析,从而延长网页的加载时间。

document.write() 写入不平衡 造成解析错误

今天在用firefox控制台调试网页时,发现两条js的错误,显示如下:

[11:33:46.227] 利用 document.write() 写入不平衡树引发来自网络的数据被重新解析。更多信息参见 https://developer.mozilla.org/en/Optimizing_Your_Pages_for_Speculative_Parsing @ http://www.webkaka.com/:174

[11:33:52.295] 利用 document.write() 写入不平衡树引发来自网络的数据被重新解析。更多信息参见 https://developer.mozilla.org/en/Optimizing_Your_Pages_for_Speculative_Parsing @ http://www.webkaka.com/:1228

根据提示,我找到对应的js代码:

第一条是这样写的

<table>
<script language=javascript >
  document.write ("<tr><td>文章列表一</td></tr>");
  document.write ("<tr><td>文章列表二</td></tr>");
</script>
</table>

第二条是这样写的

document.write("文章列表一");

firefox认为我这样的document.write() 写入不平衡,从而造成推断解析错误。

下面看看Firefox开发者是怎样说的。

优化你的网页推测解析

传统的浏览器中,HTML解析器在主线程上运行,当遇到</ SCRIPT>标记时会被锁定,直到脚本已经执行成功。HTML解析器在Firefox 4及更高版本支持推断性的解析,它能提前解析正在下载的脚本并执行它。Firefox 4及更高版本的HTML解析器也运行HTML树构造算法推测。有利的一面是,当一个推挡解析成功,就没有必要重新分析已经被扫描过的脚本、样式表和图像文件的传入部分。缺点是,当一个推测解析失败时,会有更多的工作丢失。

此文档可以帮助你避免推测失败,减缓你的页面加载的那些东西。

使推测成功加载

只有一条规则使推测加载链接脚本、样式表和图标成功:

● 如果使用<base>元素覆盖你的网页基本URI,把元素放到文档的非脚本部分,不要通过document.write()或document.createElement()方法添加它。

避免失去树构建输出

 当document.write()改变树结构状态时,推测树构建就会失败,以至当所有内容通过document.write()解析并插入后,推测状态在</script>标签之后将不再保留。然而只有不正确使用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>

是没有问题的。

标签: document.write  
相关文章
    x
    • 站长推荐
    /* 左侧显示文章内容目录 */