Свободная память браузера из скрипта JS - PullRequest
1 голос
/ 15 июля 2011

Возможно ли освободить память браузера от объектов 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.

Есть ли какое-то неверное предположение?

Может ли кто-нибудь дать советы по эффективной практике программирования или полезным ресурсам для чтения?

Большое спасибо.

1 Ответ

2 голосов
/ 15 июля 2011

У вас нет прямого доступа к функциям управления памятью.Лучшее, что вы можете сделать, это удалить ссылки на объекты, чтобы они были доступны для сборки мусора, который будет запускаться время от времени, как браузер сочтет нужным.

Время от времени некоторые браузеры показывают утечки памяти, естьстратегии, чтобы уменьшить их, но обычно для особых случаев (например, печально известная круговая ссылка утечки IE, которая была исправлена, даже, насколько я знаю, даже в обновленных версиях IE 6).

Вероятно, не стоит беспокоиться оесли только вы не обнаружите, что у вас есть проблемы.Тогда смирись с этим.

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