我被告知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