2017-03-16 57 views
0

我知道這個問題聽起來很瑣碎,但我只想知道'瀏覽器如何處理DOM以及由於大量DOM元素而變得緩慢?這只是大小?如果DOM元素數量不是很多,但javascript對象是什麼?它會反應緩慢嗎?我猜,如果有事件附加到JavaScript對象,我們不處理它們,它響應速度慢,因爲它必須執行所有事件處理程序(以順序方式),但除此之外,還有其他什麼是事件處理程序「內存泄漏」導致瀏覽器速度下降的原因? (假設瀏覽器消耗了大量內存,但系統中仍有足夠的內存可用)。爲什麼瀏覽器變得很慢,大量DOM元素

更新: 令人驚訝的是,CPU和內存使用總是受到控制,而瀏覽器響應速度慢。

+0

你的意思是*** FireFox ***?至少在記憶問題上這是最糟糕的一次。 – Hopeless

+2

如果由於擁有大量數據而需要大量的內存,這不是「內存泄漏」。 – nnnnnn

+0

@nnnnnn,好吧,它不是內存泄漏,但它可以影響瀏覽器的性能。 – Pragmatic

回答

0

如果一個頁面的所有元素都被加載了,並且它沒有改變,那麼沒有理由不管DOM元素的數量多少都應該慢。但是,如果您有動態頁面,則會有大量操作導致整個佈局自行重繪。這稱爲layout thrashing,可能會對性能產生顯着影響。

+0

所有內容加載後它變得很慢。 – Pragmatic

0

最顯而易見的是,您的瀏覽器會佔用您的所有內存,並且在滾動期間需要渲染某些內容時,例如它沒有更多內存。 如果沒有內存問題,那麼JohanP就是寫 - 沒有理由。

0

爲什麼瀏覽器在加載大量數據時變慢?因爲他們必須加載大量的數據。大圖像顯然是加載速度最差的罪魁禍首,但頁面加載與傳輸的千字節數直接相關。如果你有很多代碼,它將會有一個大的文件大小。

至於JavaScript中,有泄漏的四大原因:

  1. 意外全局變量 - 沒有明確定義的變量將承擔全球範圍內:

    function foo(arg) { bar = "This is a global variable"; }

  2. 被遺忘的定時器或回調 - 在定時函數中聲明變量時,如setInterval(function() {}),變量仍然存在於時間間隔的末尾。

  3. 外出時的DOM參考 - 當一個元件,其稍後被移除分配基準,基準仍然存在:

    ​​

  4. 瓶蓋 - 環往往不'正確'關閉,失去可變範圍,並在此過程中泄漏。見JavaScript closures

對JavaScript的內存泄漏的更多信息,請參見4 Types of Memory Leaks in JavaScript and How to Get Rid Of Them

希望這會有所幫助!

+0

我不是在談論'加載時間'。一旦它被加載,它對用戶的行爲反應緩慢。比方說,滾動變得緩慢,打開一個下拉開始花費時間,等等。 – Pragmatic

+0

*「2.。該變量仍然存在於間隔結束時。」* - 不,它不。爲什麼呢? setInterval調用你的函數,你的函數運行完成,局部變量不保留。除非存在嵌套函數導致閉包情況,否則創建的對象在函數外被引用,這兩者都不是setInterval的固有問題。 – nnnnnn

相關問題