Как создать утечку памяти и отслеживать использование памяти в JavaScript - PullRequest
8 голосов
/ 08 мая 2019

Я пытаюсь выделить память в JavaScript для изучения утечки / потребления памяти, используя фрагмент кода ниже.Однако

performance.memory.usedJSHeapSize 

всегда показывает одно и то же число, в моем случае 10000000.Почему же это число никогда не меняется, несмотря на динамическое создание элементов и подключение к DOM?

Мне нужен фрагмент JavaScript для создания утечки памяти и динамического мониторинга использования с помощью performance.memory.usedJSHeapSize (или любых других функций, если они существуют),

Я попробовал этот код, но performance.memory.usedJSHeapSize остается на 10000000:

<body>
    <p id="memory" style="position: fixed; top:10px; left:10px"></p>
<script>

    setInterval(() => {
        document.getElementById("memory").innerHTML = performance.memory.usedJSHeapSize
    }, 300);
     btn = [];
    let i = 0;
    setInterval(() => {
        for (let j = 0; j < 1000; j++) {
            ++i;
            let k=i;
            btn[k] = document.createElement("BUTTON");
            document.body.appendChild(btn[k]);
            btn[k].innerHTML = k;
            btn[k].addEventListener("click", function () {
                alert(k);
            });
        }
    }, 5000);
</script>
</body>

Я уже устал от приведенного в этом посте примера 2013 года, но этот больше не создает утечку памяти.,

Как создать утечку памяти в JavaScript?

1 Ответ

1 голос
/ 14 мая 2019

performance.memory.usedJSHeapSize не обновляется при открытии страницы непосредственно из локальной файловой системы.

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

Proof

Или вы можете проверить сами: https://memory -leak.surge.sh / simple/ (Вы также можете проверить исходный код: https://memory -leak.surge.sh / , но ваш браузер может зависнуть, если оставить его открытым более чем на несколько секунд.)


Как разместить HTML, как я делал выше:

Самый простой вариант - использовать инструменты разработчика, такие как Browsersync или Parcel .Эти инструменты позволят вам открывать файлы из локальной файловой системы, как если бы они были размещены на сервере с URL-адресом, таким как http://localhost:1234/.(Поскольку на вашем компьютере запущен временный веб-сервер.)

Другой вариант - разместить файлы на сервере.Есть много вариантов сделать это:

  • помпаж Инструмент, который я использовал для приведенных выше примеров
  • Glitch (Это крутопотому что вы можете редактировать файлы в режиме онлайн и сразу же увидеть изменения)
  • Github pages

Примечание: результаты могут отличаться в зависимости от браузера / аппаратного обеспечения.Моя среда:

  • Chrome версии 74.0.3729.131 (официальная сборка) (64-разрядная версия)
  • Windows 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...