Утечки памяти в JavaScript
Принцип достижимости
- Достижимы изначально
Значения, ссылки на которые содержатся в стеке вызова
Глобальные переменные
1
2
3
5
4

GC
Инструменты
Псевно-утечка памяти



object pool

Реализации пулов объектов:

"Не псевдо-утечка памяти"
Для чистоты эксперимента:
- Хромиум должен быть запущен с дефолтными настройками.
- Открытой нужно оставить только одну вкладку с тестируемым сайтом.
- Не должны быть установлены плагины.
Основные причины учечки памяти
- Возвращаемые значения
- Замыкания
- Атрибуты и методы объекта
- Callback функции и события DOM
function foo() {
var bar = new LargeObject();
bar.someCall();
}
function foo() {
var bar = new LargeObject();
bar.someCall();
return bar;
}
// где то в другом месте
var b = foo();
function sum (x) {
function sumIt(y) {
return x + y;
};
return sumIt;
}
// Использование
var sumA = sum(4);
var sumB = sumA(3);
console.log(sumB); // Возвращает 7
var myObj = {
callMeMaybe: function () {
var myRef = this;
var val = setTimeout(function () {
console.log('Time is running out!');
myRef.callMeMaybe();
}, 1000);
}
};
myObj.callMeMaybe();
myObj = null;
myObj.foo = thatObj
function some_function(arg1, arg2, callback) { var my_number = arg1 - arg2; callback(my_number); } some_function(5, 15, function (num) { var obj = myObj; var newNum = myObj.num + num; console.log("callback called! " + newNum); });
function modifyText() {
var t2 = document.getElementById("t2");
if (t2.firstChild.nodeValue == "три") {
t2.firstChild.nodeValue = "два";
} else {
t2.firstChild.nodeValue = "три";
}
}
var el = document.getElementById("outside");
el.addEventListener("click", modifyText, false);
Удаление ссылок
delete
null
var o = { x: 1 };
delete o.x; // true
o.x; // undefined
var o = { x: 1 }; o = null;
o; // null
o.x // TypeError

Правила на каждый день:
- Переменных внутри функций, вместо глобальных.
- Важно удалять обработчики событий.
- Если вы используете локальный кэш, стоит позаботиться о его удалении.
Управляйте своей памятью!
Пушкарская Дарья
deck
By d_pushkarskaya
deck
- 484