我遇到过一个问题,我创建了一个网格,它通过使用文档片段动态构建,并在将其附加到div之前附加元素。我注意到appendChild和removeChild似乎导致内存泄漏。我创建了一个演示这个的jsfiddle。我确保浏览器的所有插件都被禁用(我没有太多开始)。如果打开开发人员工具栏(F12)并在单击运行时分析内存,您会注意到内存将会上升。每次单击它,内存都会上升。好像垃圾收集从未发生过。如果代码存在问题,请指出。我已经尝试将值设置为变量后设置为null,并尝试删除,但它们没有区别。
https://jsfiddle.net/k75ypb76/6
HTML:
<div id="grid">
</div>
<button id="btnRun">
Run
</button>
CSS:
#grid{
height: 250px;
width: 500px;
overflow: scroll;
border: 1px solid #000000;
}
.row{
border: 1px solid #ff0000;
}
.cell{
display: inline-block;
width: 40px;
background-color: #00ff00;
}
JS:
function run(){
var grid = document.getElementById('grid');
//create the grid 20 times
for(var i =0; i < 20; i++){
var doc = document.createDocumentFragment();
//clear out the grid
while (grid.firstChild) {
grid.removeChild(grid.firstChild);
}
//create 300 rows
for(var x = 0; x < 300; x++){
var row = document.createElement('div');
row.className = 'row';
//create 10 cells per row
for(var y = 0; y < 10; y++){
var cell = document.createElement('div');
cell.className = 'cell';
cell.textContent = x + '-' + y;
row.appendChild(cell);
}
doc.appendChild(row);
}
grid.appendChild(doc);
}
}
var btnRun = document.getElementById('btnRun');
btnRun.addEventListener('click', run);
谢谢,希望有人可以帮忙解决这个问题。
答案 0 :(得分:1)
当你删除child时,会有一个没有从内存中删除的返回 - IE和EDGE以外的浏览器似乎足够聪明,看你没有使用返回值并为你清理。
答案 1 :(得分:1)
好的,这很有趣。使用拼写检查程序在Windows 7,8,8.1的IE11中存在已知问题。有一个已发布的修补程序,刚刚发布的12月8日更新。但是,这显然不适用于Windows 10.问题仍然存在。我现在给出的修复是编辑注册表:
[HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_SPELLCHECKING] “IEXPLORE.EXE”= DWORD:00000000
希望这有助于其他人。