2010-07-23 101 views

回答

15

在大多数浏览器中,document.write()本身似乎不会对页面性能造成很大的伤害。事实上,我在DHTML Kitchen进行了一些测试,发现在Firefox,Opera和Chrome中,document.write()在第一次加载时实际上速度更快,并且在随后的刷新时速度相当于标准HTML。 Internet Explorer 8是个例外,但它在渲染HTML时实际上比其他浏览器更快(令人惊讶)。

由于Guffa's answer指出,我正在建立的,实际的性能问题来自内联脚本本身。内容呈现只能在内联脚本完成执行时继续进行,因此,如果您在内联脚本中包含复杂事件例程,那么您可以明显停止为最终用户加载页面。这就是为什么等待onload/DOMReady并且使用DOM操作是首选。

在文档加载完成后使用document.write()尤其不明智。在大多数浏览器中,在文档加载后使用document.write()还意味着document.open(),它将从屏幕擦除当前HTML并创建一个新文档。

这并不意味着document.write()没有它的用​​途,只是大多数开发人员使用它的原因是错误的。与文件撰写的实际问题()包括:

  • 不能使用它的文件作为XHTML(对于浏览器的正确解析XHTML为XHTML)。
  • 在DOM解析完成后覆盖整个页面。
  • 将内容添加到禁用JavaScript的浏览器无法访问的页面(尽管<noscript>有时是有效的解决方法)。
  • 比静态HTML更难维护。
6

如果脚本在页面中间运行,浏览器必须等待脚本完成才能继续解析页面的其余部分。

为了使您的页面显示更快,您希望浏览器尽快解析页面,以便它可以显示给用户,之后您可以应用脚本添加的额外功能。

+2

我想补充一点,每次通过document.write()插入新的HTML时,整个页面都会被再次解析,整个CSS级联以及所有其余部分。 – Robusto 2010-07-23 12:36:16

+1

这对任何脚本都很重要,不仅仅是'document.write'。 – 2010-07-23 12:37:51

+2

@Robusto:嗯......整个页面不能再被解析。由于在分析页面时使用了'document.write',解析还没有完成...... – Guffa 2010-07-23 12:41:04

0

我认为有一些原因应该避免。

,但你的意思是,如果你在你的HTML代码中有地方一个

<script> 
document.write('mystuff') 
</script 

的问题是一个,即bevore浏览器可以显示你的网站,它必须加载JavaScript翻译。 如果你只会通过body.onLoad开始你的JavaScript就可以显示整个网站给用户,然后运行JavaScript的你... 因此

主观加载时间更快:-)