AngularJS: утечка памяти с ng-repeat с использованием пользовательских объектов (с простым PLUNKR)

(простая демонстрация plunkr здесь )РЕЗЮМЕ:Утечка с использованием ng-repeat после второй волны итерации по «массиву» настраиваемых объектов, подобных этому:Профиль памяти показывает лишний «d_sampleObject», оставшийся без ссылки.Более подробная информация (через контроллер и внедренный сервис) ниже.Простая демонстрация также в предоставленной ссылке на plunkr.Любые мысли и помощь заранее приветствуются!ПРИМЕЧАНИЕ. MySampleObjects - это массив следующих экземпляров:ПОДРОБНОСТИ:У меня есть настраиваемая объектная модель, которая отражает объекты бизнес-домена, которые мы используем в нашем приложении AngularJS.Я обнаружил, что когда я передаю экземпляр одного из моих настраиваемых объектов в ng-repeat, ссылка на него сохраняется (я думаю, с помощью Angular), и память не освобождается.Это происходит во второй «волне» (нажмите «обновить») ng-repeat, когда он снова итерирует свой массив объектов.Эта утечка обнаружена в моих тестах профиля (в Chrome).Вот краткий пример в plunkr.Нажмите кнопку «Обновить» один раз (или несколько раз), чтобы увидеть дополнительный экземпляр объекта d_sampleObject, который утек (в Проверке профиля Chrome).Обратите внимание, что имя d_sampleObject используется только при передаче в ng-repeat.Я включил скриншоты дополнительного экземпляра объекта ('d_sampleObject'), который просочился ниже.Почему возникает утечка и как ее избежать?(Обратите внимание, я обнаружил, что если я не перебираю свою коллекцию объектов (массив JS) через объект, а скорее через примитивный индекс ('целое число'), утечки нет. Утечка, похоже, происходит только тогда, когда я используюссылка на объект в результате повторений ng-repeat)ПРОСТОЙ HTML:ПРОСТОЕ APP.JSПРОСТОЙ dataservice.jsСКРИНШОТ 1: (ЗАГРУЗКА ПЕРВОЙ СТРАНИЦЫ - создано 10 объектов mySampleObjects)СКРИНШОТ 1: (ЗАГРУЗКА ПЕРВОЙ СТРАНИЦЫ - создано 10 объектов mySampleObjects)СКРИНШОТ 2: (НАЖАТИЕ НА ОБНОВЛЕНИЕ - существует 11-й объект mySampleObject, созданный /просочившийся со ссылкой на имя экземпляра 'd_sampleObject', переданное в ng-repeat.)(НАЖАТИЕ НА ОБНОВЛЕНИЕ - существует 11-й объект mySampleObject, созданный /просочившийся со ссылкой на имя экземпляра d_sampleObject, переданное в ng-repeat.)
7 голосов | спросил MoMo 24 FebruaryEurope/MoscowbTue, 24 Feb 2015 00:39:31 +0300000000amTue, 24 Feb 2015 00:39:31 +030015 2015, 00:39:31

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132