Как освободить всю использованную память на веб-странице? - PullRequest
0 голосов
/ 20 апреля 2020

Как только мы открываем веб-страницу (скомпилированную веб-пакетом), мы создаем некоторый объект в js куче.

Как мы можем освободить всю использованную память в js куче?

Откройте chrome devtools, сделайте снимок памяти: snapshot

Я пытаюсь:

  1. удалить все файлы:
document.body.innerHTML = '';
document.head.innerHTML = '';
удалить все прослушиватели событий:
var list = [window, document];
list.forEach(element => {
  var listeners = window.getEventListeners(element);
  for (var key in listeners) {
    listeners[key].forEach(l => {
      element.removeEventListener(key, l.listener, l.useCapture);
    });
  }
});
очистить тайм-аут:
let id = window.setTimeout(function () {}, 0);

while (id--) {
  window.clearTimeout(id);
}
очистить все объекты в окне:
var list = [ document, window ];
var white = [
  'Infinity', 'NaN', 'undefined', 'Object', 'window', 'top', 'location', 'Reflect', 'document', 'prototype',
  'MAX_VALUE', 'MIN_VALUE', 'NEGATIVE_INFINITY', 'POSITIVE_INFINITY', 'Array',
];

while (list.length) {
  var item = list.shift();
  if (item == null) continue;

  var arr = Reflect.ownKeys(item);

  for (let i = 0; i < arr.length; i++) {
  if (white.indexOf(arr[i]) !== -1) continue;
    var desc = Object.getOwnPropertyDescriptor(item, arr[i]);
    if (desc && desc.configurable) {
      Object.defineProperty(item, arr[i], {
        value: null,
      });
    }
  }
}

Но мы по-прежнему находим множество объектов в js куче ... after clear memory

Как я могу см:

  1. __webpack_require__ ссылка на множество скомпилированного кода
  2. на множество объектов ссылается полифилл-код ..

Может кто-нибудь дать мне несколько советов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...