переменные внутри функций, я уверен, что эта сборка собрана GC просто отлично
Да.
переменные внутри модуля, должен ли g = null, когда он больше не нужен?
Конечно.
И, наконец, жизнь jqXHR: очищается ли он после возвращения? Должно ли оно быть установлено равным нулю во всех случаях в качестве меры предосторожности, если оно хранится внутри функции или модуля?
В различных браузерах были ошибки, связанные с XHR, из-за которых onreadystatechange
и все, что он закрывал, оставалось невосприимчивым, если разработчик не был осторожен, чтобы заменить его фиктивным значением (xhr.onreadystatechange = new Function('')
), но я считаю, что jQuery справится с этим для вас ,
Наконец, есть ли способ очистить все переменные и перезапустить модуль без перезапуска браузера?
Глобальное состояние, связанное со страницей, будет занимать память браузера до тех пор, пока страница не будет удалена из стека истории браузера. location.replace
может помочь вам в этом, позволив вам убить текущую страницу и заменить ее новой версией того же приложения без расширения стека истории.
Заменить текущий документ документом по указанному URL. Отличие от метода assign()
состоит в том, что после использования replace()
текущая страница не будет сохранена в истории сеанса, а это означает, что пользователь не сможет использовать кнопку Назад для перехода к ней.
Когда вы используете слово «модуль», это не тот термин, который имеет четко определенное значение для браузера или его интерпретатора JavaScript, поэтому нет способа удалить модуль и только модуль из памяти. Есть несколько вещей, о которых вам нужно беспокоиться, которые могут сохранить вещи в памяти:
- Ссылки на объекты JavaScript, которые были присоединены к узлам DOM, и все, что они закрывают - обработчики событий - очень распространенный пример.
- Живые
setInterval
и setTimeout
обратные вызовы и все, что они закрывают.
- Свойства глобального объекта и всего, что они закрывают.
- Как вы заметили, свойства определенных хост-объектов, таких как экземпляры XHR, обратные вызовы веб-работников и т. Д., И (как вы уже догадались) всего, что они закрывают.
Любая схема, которая собирается выгрузить модуль и только модуль, должна была бы иметь дело со всеми из них и выяснить, какие из них являются частью модуля, а какие нет. Это много разных видов очистки.