Возможно ли освободить память браузера от объектов JavaScript?
Я проектирую процесс асинхронной навигации веб-приложения, в котором части страницы загружаются через запросы AJAX вместе с их необходимыми компонентами (CSS, JS, изображения и т. Д.): Я предполагаю, что без надлежащего сценариев, длительное использование приложения будет загружать много различных объектов, вызывая жестокий рост памяти .
Как я мог себе представить, удаление тега сценария из DOM удаляет только узел DOM, а не объекты и функции, которые он определяет, который остается загруженным в память браузера.
(Аналогичный тест: Следует ли разрешить тегу "script" удалить себя? ).
Я также пытался проверить поведение браузера, задав переменную в виде большой строки, а затем перезаписав ее:
<html>
<head>
<title>JS memory test</title>
<script type="text/javascript">
function allocate() {
window.x = '';
var s = 'abcdefghijklmnopqrstuvwxyz0123456789-';
for (var i = 0; i < 1000000; ++i) {
window.x += 'hello' + i + s;
}
alert('allocated');
}
function free() {
window.x = '';
alert('freed');
}
</script>
</head>
<body>
<input type="button" value="Allocate" onclick="javascript:allocate();" />
<input type="button" value="Free" onclick="javascript:free();" />
</body>
</html>
Данные из диспетчера задач Chrome:
page weight when loaded:
5736 KB
page weight after having set the variable:
81720 KB
page weight after having the variable reset:
81740 KB
Меня поразило, так как я думал, что сборщик мусора JS выбрасывает старое значение переменной, поскольку оно перезаписывается из нового назначенного значения.
Firefox не имеет единого управления вкладками задач, поэтому нет такого монитора процессов, как в Chrome, но глобальное использование памяти, похоже, ведет себя почти как Chrome.
Есть ли какое-то неверное предположение?
Может ли кто-нибудь дать советы по эффективной практике программирования или полезным ресурсам для чтения?
Большое спасибо.