Backbone явно не обрабатывает очистку объектов для вас. Это 50/50 для вас и время выполнения JavaScript.
JavaScript - это язык для сборки мусора, такой как Java, C #, Ruby и другие. Основой языков сборки мусора является то, что объект, на который все еще ссылается ваше приложение, не будет очищен. В противовес этому, когда объект больше не ссылается на ваше приложение, он будет очищен.
JavaScript в целом:
Когда вы создаете переменную, вы можете использовать ее как локальную функцию или как глобальную переменную.
Глобальные переменные никогда не очищаются сборщиком мусора в течение жизни страницы. Единственный раз, когда они очищаются, это когда вы полностью оставляете HTML-страницу - переходите на другую страницу и заставляете браузер загружать новую страницу с сервера (выполняется полное обновление сервера) или закрываете браузер или вкладку браузера.
Переменные области действия функции очищаются, когда переменная выходит из области видимости, то есть когда функция вышла из системы и на нее больше нет ссылок. Есть несколько исключений из этого: возвращаемые значения и замыкания.
Возвращаемое значение сохраняется в вашем приложении путем присвоения возвращаемого значения другой переменной. Возвращаемое значение подпадает под те же общие правила, но переменная теперь находится в другой функции. Как только эта переменная выходит из области видимости, ее можно очистить.
Закрытие позволяет родительской области предоставлять значения, к которым может иметь доступ дочерняя область. Когда очищается область потомка, закрытой переменной родителя может быть разрешено очищаться (при условии, что больше ничего не удерживает ее).
Объекты с атрибутами и функциями подпадают под те же правила. Объект может ссылаться на другой объект или функцию, если ему назначен атрибут: myObj.foo = thatObj
.
DOM (объектная модель документа - HTML-код в вашем приложении) - это объект JavaScript. События и другие ссылки на вашу DOM работают так же, как и любые другие ссылки. Если у вас есть объект, обрабатывающий событие DOM, он имеет ссылку в вашем приложении и не будет очищен сборщиком мусора. Если вы хотите, чтобы он был очищен, вы должны удалить все ссылки на него, включая ссылку на DOM из обработчика событий.
Очистка памяти
Общее правило: если вы загружаете данные в базовую коллекцию или объект и хотите, чтобы этот объект был очищен, чтобы он больше не использовал память, вы должны удалить все ссылки на этот объект. Это стандартное правило сборки мусора в JavaScript.
Вы не можете форсировать сборку мусора, но вы можете заставить переменную отменять ссылку на то, на что она указывает, используя ключевое слово delete
в JavaScript: delete myVar
Магистральные
Backbone - это JavaScript, поэтому он подчиняется тем же правилам. Есть несколько интересных применений замыканий и ссылок в Backbone, о которых вам необходимо знать, что поможет вам узнать, когда вам нужно вручную очистить некоторые объекты.
Например: события. Четный метод обработчика / обратного вызова работает, имея ссылку между объектом, который вызывает событие, и обратным вызовом, который обрабатывает событие. Это одно из самых простых мест, вызывающих утечки памяти в приложении Backbone, и я подробно его обсуждаю здесь: http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/
Кроме понимания того, как события работают в терминах ссылок, просто следуйте стандартным правилам управления памятью в JavaScript, и все будет в порядке. Как только вы удалите все ссылки на эту коллекцию объектов User, они будут очищены.