Javascript 使用大量DOM元素时浏览器速度变慢的原因

Javascript 使用大量DOM元素时浏览器速度变慢的原因,javascript,jquery,dom,browser,Javascript,Jquery,Dom,Browser,我知道这个问题听起来很琐碎,但我只想知道“浏览器”是如何处理DOM的,以及是什么让它在处理大量DOM元素时变得缓慢?这个尺寸差不多吗?如果DOM元素数量不多,但javascript对象数量多,该怎么办?它的反应还会很慢吗 我猜,如果有附加到javascript对象的事件,而我们不处理它们,它的响应速度会很慢,因为它必须执行所有事件处理程序(以顺序方式),但除此之外,“内存泄漏”会减慢浏览器速度的另一个原因是什么?(假设浏览器消耗了大量内存,但系统中仍有足够的内存可用) 更新: 令人惊讶的是,当浏

我知道这个问题听起来很琐碎,但我只想知道“浏览器”是如何处理DOM的,以及是什么让它在处理大量DOM元素时变得缓慢?这个尺寸差不多吗?如果DOM元素数量不多,但javascript对象数量多,该怎么办?它的反应还会很慢吗

我猜,如果有附加到javascript对象的事件,而我们不处理它们,它的响应速度会很慢,因为它必须执行所有事件处理程序(以顺序方式),但除此之外,“内存泄漏”会减慢浏览器速度的另一个原因是什么?(假设浏览器消耗了大量内存,但系统中仍有足够的内存可用)

更新:
令人惊讶的是,当浏览器响应缓慢时,CPU和内存的使用总是在控制之下。

如果一个页面加载了它的所有元素,并且它没有变化,那么无论DOM元素的数量多少,它都没有理由变慢。但是,如果您有一个动态页面,则会有大量操作导致整个布局重新绘制自身。这会被调用,并且会对性能产生显著影响。

如果一个页面加载了它的所有元素,并且它没有变化,那么无论DOM元素的数量有多大,它都没有理由变慢。但是,如果您有一个动态页面,则会有大量操作导致整个布局重新绘制自身。这被称为,可能会对性能产生显著影响。

最明显的是,您的浏览器消耗了您所有的内存,例如,在滚动过程中渲染某些内容时,它没有更多的内存。
如果没有内存问题,那么JohanP是write-没有原因。

最明显的是,浏览器消耗了所有内存,并且在滚动期间渲染某些内容时,例如,它没有更多内存。
如果没有内存问题,那么JohanP是写的-没有理由。

为什么浏览器在加载大量数据时会减慢速度?因为他们必须加载大量数据。就加载速度而言,大图像显然是罪魁祸首,但页面加载与传输的千字节数直接相关。如果你有很多代码,它将有一个很大的文件大小

至于JavaScript,有四个主要的泄漏原因:

  • 意外全局变量——未明确定义的变量将采用全局范围:

    函数foo(arg){
    bar=“这是一个全局变量”;
    }

  • 被遗忘的计时器或回调——在像
    setInterval(function(){})
    这样的定时函数中声明变量时,该变量仍然存在于间隔的末尾

  • DOM外引用——将引用分配给元素时,该元素随后被删除,引用仍然存在:

    var按钮:document.getElementById('button');
    document.body.removeChild(document.getElementById('button')

  • 闭包——循环通常无法“正确”关闭,从而丢失变量范围,并在过程中泄漏。请参见

  • 有关JavaScript内存泄漏的更多信息,请参见


    希望这有帮助

    为什么浏览器在加载大量数据时会变慢?因为他们必须加载大量数据。就加载速度而言,大图像显然是罪魁祸首,但页面加载与传输的千字节数直接相关。如果你有很多代码,它将有一个很大的文件大小

    至于JavaScript,有四个主要的泄漏原因:

  • 意外全局变量——未明确定义的变量将采用全局范围:

    函数foo(arg){
    bar=“这是一个全局变量”;
    }

  • 被遗忘的计时器或回调——在像
    setInterval(function(){})
    这样的定时函数中声明变量时,该变量仍然存在于间隔的末尾

  • DOM外引用——将引用分配给元素时,该元素随后被删除,引用仍然存在:

    var按钮:document.getElementById('button');
    document.body.removeChild(document.getElementById('button')

  • 闭包——循环通常无法“正确”关闭,从而丢失变量范围,并在过程中泄漏。请参见

  • 有关JavaScript内存泄漏的更多信息,请参见


    希望这有帮助

    你是说FireFox吗?至少在内存问题上,这是最糟糕的。如果因为有大量数据而需要大量内存,这不是“内存泄漏”。@nnnnnn,好吧,这不是内存泄漏,但会影响浏览器性能。你是说FireFox吗?至少在内存问题上,这是最糟糕的。如果由于数据量大而需要大量内存,这不是“内存泄漏”。@nnnnnnnn,好吧,这不是内存泄漏,但会影响浏览器性能。我不是说“加载时间”。一旦它被加载,它对用户操作的响应就会变慢。比如说,滚动变得缓慢,打开下拉列表开始花费时间等等。“2……变量在间隔结束时仍然存在。”-不,它不存在。为什么会这样?setInterval调用函数,函数运行到完成,局部变量不保留。除非有一个嵌套函数导致闭包情况,或者创建了在函数外部引用的对象,这两个都不是setInterval固有的问题。我不是在说“加载时间”。一旦它被加载,它对用户操作的响应就会变慢。比如说,滚动变得缓慢,打开下拉列表开始花费时间等等。“2……变量在间隔结束时仍然存在。”-不,它不存在。为什么