Как проверить выделение памяти для переменной javascript - PullRequest
0 голосов
/ 21 июня 2020
var test = [{a:1,b:2}];

test.value = test;

Для приведенного выше кода я хотел бы увидеть, сколько памяти занято браузером. Есть ли побочные эффекты в производительности (поскольку переменная test используется рекурсивно). Я создал пример функции из gist , но получил превышение максимального количества вызовов стека. Мне просто любопытно разобраться в проблемах использования итеративного подхода.

Я знаю, что мы можем изменить приведенный выше код, чтобы сделать его нерекурсивным, как показано ниже:

var test = [{a:1,b:2}];

test.value = [...test];

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Попробуйте chrome снимок профиля памяти

Я просто написал небольшой код, чтобы проверить объем выделенной памяти во время вашей операции и записанное выделение памяти с помощью chrome devtool.

Вот код, который я написал:

<HTML>
<body>
    <button onclick="startTest()">Start Test</button>
</body>
<script>
    function startTest() {
        var test = [{a:1,b:2}];
        test.value = test;
    }
</script>
</html>

При нажатии кнопки запускается функция startTest ().

Итак, я начал запись выделения памяти и нажал кнопку Start Test, и вот результат: Результат

Тонкая синяя линия на рисунке показывает, что память, выделенная для переменной test, очень скоро будет освобождена сборщиком мусора. это означает, что нет никакой рекурсии или каких-либо проблем с выделением памяти.

0 голосов
/ 21 июня 2020

JS всегда принимает назначения от объектов как ссылки на память, есть много способов скопировать только значение объекта.

Это мой любимый

test.value = Object.assign({}, test);

Более общие c

object_copy = Object.assign({}, object_origin)

Этот код объединяет исходное значение объекта с новым, которое мы инициализируем как пустой объект {}

...