2013-06-05 2 views
20

Когда вы используете ngView, скажем, 100 разных видов, каждый с разной областью. Угловая автоматически обрабатывает уничтожение старых шаблонов/областей или они остаются в памяти? Мне просто интересно, если Angular обрабатывает это сам, прежде чем я пойду, и начну писать собственный код, чтобы уменьшить нагрузку на память. На данный момент каждый новый взгляд я просто собираю в памяти.Как Angularjs обрабатывает управление памятью с помощью ngView?

Это особый вопрос AngularJS. Я знаю, как сборка мусора работает в javascript.

+5

Да, у js есть сбор мусора. Но он не будет собирать ничего, что, по его мнению, будет использоваться. С угловым он предполагает, что $ scopes все еще используется, поэтому он никогда не будет его собирать. Поэтому я спрашиваю, как мне нужно делать в Angular, чтобы убедиться, что он может быть собран. – mfrancis107

+0

Вы всегда можете использовать «delete»? –

+0

@KGChristensen Это не так, как работает 'delete'? – rounce

ответ

22

Одним из конструктивных решений, связанных с внедрением областей, было упрощение управления памятью. Разделив пространство модели на части (области), мы можем удалить ненужные части модели (область) и добавить новые, когда это необходимо. Так что да, области являются важной частью всей головоломки управления памятью.

Когда речь заходит о вашем конкретном вопросе о ng-view - эта директива будет сохраняться только для текущего активного . ng-view является одним из способов создания (и уменьшения масштаба!) Директив. Он автоматически создаст новую область при переходе к новому представлению и автоматически уничтожит область, связанную со старым представлением. Это легко проверить в AngularJS source code.

Единственная часть памяти, которую нужно учитывать, - это шаблоны, полученные по сети. Все шаблоны, указанные в маршруте, кэшируются в $templateCache. Вы можете вырезать шаблоны, используя экономно, если вы определите, что он решает конкретное узкое место в вашем приложении. Нам просто нужно понять, что это время торговли (время сети) для потребления памяти.

Вкратце: нет необходимости развертывать собственное управление областью для ng-view - если вы видите какое-либо удерживание области, это должно быть сообщено как ошибка.

+0

Как насчет html шаблона? Я знаю, что это поддерживается, потому что он никогда не выполняет другой запрос ajax для шаблона? – mfrancis107

+0

Да, все выбранные шаблоны помещены в '$ templateCache': http://docs.angularjs.org/api/ng.$templateCache. Вы можете выселить те, которые произошли в событии изменения маршрута. Обновлен ответ. –

+1

hi @ pkozlowski.opensource Что относительно пользовательских директив, которые создают изолированные области? –

Смежные вопросы