我被告知document.write应避免在网页中,因为它会伤害网页性能。但确切的原因是什么?为什么document.write会伤害web性能?
回答
在大多数浏览器中,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更难维护。
如果脚本在页面中间运行,浏览器必须等待脚本完成才能继续解析页面的其余部分。
为了使您的页面显示更快,您希望浏览器尽快解析页面,以便它可以显示给用户,之后您可以应用脚本添加的额外功能。
我认为有一些原因应该避免。
,但你的意思是,如果你在你的HTML代码中有地方一个
<script>
document.write('mystuff')
</script
的问题是一个,即bevore浏览器可以显示你的网站,它必须加载JavaScript翻译。 如果你只会通过body.onLoad开始你的JavaScript就可以显示整个网站给用户,然后运行JavaScript的你... 因此
主观加载时间更快:-)
- 1. document.write()会造成什么样的损害?
- 2. screensaver伤害CUDA性能?
- 3. 做太多ids伤害性能
- 4. 在对象上未使用的属性有什么伤害?
- 5. RPG伤害计算?
- 6. 初始化所有ko.observables会伤害吗?
- 7. 使用元描述会伤害我吗?
- 8. 如何听多播会伤害我?
- 9. Javascript网址会伤害SEO吗?
- 10. 保留的属性附加伤害名
- 11. 是否通知书伤害到一个网站,它的性能
- 12. 是否声明C++变量const帮助或伤害性能?
- 13. Marketo Munchkin同步请求伤害JS性能
- 14. 是否使用WHERE IN伤害查询性能?
- 15. 取消伤害动画
- 16. 连击带来伤害as3
- 17. 僵尸如何伤害?
- 18. 对敌人造成伤害
- 19. 什么伤害少:Ruby on Rails 3或ASP .NET MVC 3
- 20. 使用NOLOCK读取单个静态行。有什么伤害?
- 21. 什么sql注入可以做伤害你
- 22. 这为什么会提高性能?
- 23. 为什么CompiledQuery不会提高性能?
- 24. 截断锚文本是否会伤害搜索引擎优化?
- 25. 通过Javascript动态生成内容会伤害SEO
- 26. h3标签文字/图片替换,这是否会伤害seo?
- 27. 从一个班级继承以后会伤害你吗?
- 28. AJAX加载是否会伤害搜索引擎优化?
- 29. 客户端的XSLT是否会伤害SEO
- 30. 通过项目循环和添加处理程序来伤害性能
我想补充一点,每次通过document.write()插入新的HTML时,整个页面都会被再次解析,整个CSS级联以及所有其余部分。 – Robusto 2010-07-23 12:36:16
这对任何脚本都很重要,不仅仅是'document.write'。 – 2010-07-23 12:37:51
@Robusto:嗯......整个页面不能再被解析。由于在分析页面时使用了'document.write',解析还没有完成...... – Guffa 2010-07-23 12:41:04