2010-07-23 102 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的你... 因此

主觀加載時間更快:-)