0
A
回答
3
在JavaScript中的哪些情況下,我們是否需要在運行代碼之前等待窗口onload事件?
- 如果您要訪問的節點在#document
- 如果你想要得到的值,如
- 如果你想避免競爭條件附加在頁面的高度或寬度新事物的#document
- 基本上,一切DOM相關特定頁面
什麼有用的事情可以做,而無需等待?
- 計算行動
- 聲明功能,初始化變量
- 測試功能的支持,其中包括polyfills
- 基本上,一切非DOM相關,或DOM涉及到具體的瀏覽器,但不是頁面
1
從一個相關的SO帖子:window.onload vs. body.onload vs. document.onready
window.onload會等待,直到所有資產都完成下載,如圖像和腳本。
還有一個「DOM ready」事件,允許更快地訪問dom,因爲它只會等到您可以通過API訪問DOM。
0
如果您的代碼需要執行其他文件(如庫,框架或公開全局的文件),您應該始終等待瀏覽器完成下載所有內容。
所以在大多數情況下,你應該這樣做。你可以找到不需要這種邊緣的情況,但這非常罕見,並且在人們對時間的感知中花費不多。
1
當代碼需要訪問/修改DOM和所有資源(圖像,字體等)時,需要在運行代碼之前使用window onload事件。您也可以使用jQuery(或同等版本)&(document).ready()
。它比window onload早啓動,因此用戶會覺得網站加載速度更快。不同之處在於文檔準備好只有DOM樹已準備好,但資產可能尚未加載。在窗口onload上,一切已經加載。
在文檔準備好之前,您可能還會做一些事情。例如,如果您需要爲用戶創建某種唯一的ID並設置cookie,則無需等待DOM。或者如果你想基於cookie做一些事情(只要它不接觸DOM)。或者您需要從API加載一些外部數據(但您需要等待DOM才能顯示該數據)。一般來說,任何不接觸DOM的東西都可以。
相關問題
- 1. 爲什麼我需要等待協程?
- 2. 爲什麼要等待退出?
- 3. JS異步/等待 - 爲什麼等待需要異步?
- 4. 程序爲什麼要等待schedule()完成,但不等待scheduleWithFixedDelay()?
- 5. 爲什麼不等待?
- 6. SQLPLus等待...爲什麼?
- 7. 爲什麼等待塊Dispatcher.Invoke?
- 8. 爲什麼WaitForExit()不等待?
- 9. Javascript window.onload不等待DOM加載
- 10. 什麼是等待?
- 11. 爲什麼在等待後HttpContext.Current爲null?
- 12. 爲什麼要等待異步Web服務調用
- 13. 爲什麼pclose(3)不要等待shell命令終止
- 14. 爲什麼要在方法中間等待異步方法?
- 15. 爲什麼要等待線程延遲更新擺動組件?
- 16. 爲什麼要使用異步並等待Task <>?
- 17. 爲什麼要等待DIFS以檢測信道是否空閒
- 18. window.onload = init();有什麼不同?和window.onload = init;
- 19. 爲什麼我的TCS不等待?
- 20. 爲什麼在裏面等待同步?
- 21. 爲什麼主線程會等待
- 22. 爲什麼condition_variable無限期地等待
- 23. 爲什麼頁面不停地等待?
- 24. 爲什麼Process.WaitForExit不會等待?
- 25. 爲什麼async等待拋出NullReferenceException?
- 26. 爲什麼ajax等待一秒鐘?
- 27. 爲什麼沒有未來::等待()塊
- 28. 爲什麼asyncio.wait不會等待FIRST_COMPLETED
- 29. 爲什麼這些rspec測試「等待」?
- 30. 什麼是等待setSoTimeout
你的意思是不是'DOMReady',或者一般? – 2014-09-01 12:36:49
如果你的腳本是BEFORE HTML,那麼你必須等待它加載(否則你會嘗試訪問不存在的東西)。如果它是在標記之後,那麼你可能需要僅等待異步上下文(比如圖像),因爲它們會參與佈局。最後,DOM已經準備就緒並且只有在它已經被解析時纔可用(但是當它已經準備就緒時,你可以在onload之前使用它)。 – 2014-09-01 12:38:11
@FrédéricHamidi - 我的意思是一般 – 2014-09-01 12:39:42