这被认为是内存泄漏吗?如果是这样......如何解决?

时间:2017-07-25 05:23:13

标签: javascript jquery

数百万的div与类.clickable

用户变成野蛮人并点击视线中的每个div

这被认为是内存泄漏......

如果是这样......

我需要注射什么代码来阻止它



var body = $('body');
var clickme = '.clickable';

body.find(clickme).click(function() {
  var $this = $(this);
  
  $this.addClass($this.data('add-class'));
});

/* whatever the class click-number css is suppose to be*/

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-add-class="click1" class="clickable"></div>
<div data-add-class="click2" class="clickable"></div>
<div data-add-class="click3" class="clickable"></div>
…
…
<div data-add-class="click500000" class="clickable"></div>
<div data-add-class="click500001" class="clickable"></div>
<div data-add-class="click500002" class="clickable"></div>
<div data-add-class="click500003" class="clickable"></div>
…
…
<div data-add-class="click1000000" class="clickable"></div>
<div data-add-class="click1000001" class="clickable"></div>
<div data-add-class="click1000002" class="clickable"></div>
<div data-add-class="click1000003" class="clickable"></div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:5)

它不是内存泄漏,但它是内存浪费。用户点击无关紧要;将一个点击监听器附加到每个对象的事实使它成为浪费。相反,请听一个祖先元素(或document,如果你不能识别一个共同的祖先):

$(document).on('click', '.clickable', function(evt) {
  ...
});

顺便说一下,内存泄漏就是每次用户点击时,你会分配更多你以后不会自由的内存。谢天谢地,你不这样做。

答案 1 :(得分:1)

我在这里没有看到任何问题,也没有内存泄漏。

来自维基百科比较&#34; 内存泄漏&#34;反对&#34; 空间泄漏&#34;:

  

当计算机程序使用的内存超过时,会发生空间泄漏   必要。与泄漏内存泄漏的内存泄漏相反   从未发布,空间泄漏消耗的内存被释放,但是   比预期的要晚。

如果您有数百万个div,浏览器将需要一个明显的漫长等待时间来加载,并且需要显着的漫长等待时间来呈现,以及在每次点击时附加事件监听器的显着漫长等待时间。

您的代码很好,不用担心任何事情。 (除非你真的使用了数百万的div)。

所以回答你的问题&#34;这被认为是内存泄漏了吗?&#34;: