Я работаю над приложением angularjs, используя директивы angularjs-nvd3 для рендеринга диаграмм.
После проверки с помощью инструментов разработчика Chrome я обнаружил некоторые утечки памяти, связанные с диаграммами. Когда пользователь перемещается по различным представлениям, содержащим диаграммы, память никогда полностью не освобождается.
Я уже делаю очистку на графических контроллерах:
$scope.$on('$destroy', function() {
d3.select( '#exampleId' ).remove();
d3.select( '#exampleId2' ).remove();
...
});
И в событии routeChange:
myApp.run(function($rootScope, $templateCache) {
//try to clear unused objects to avoid huge memory usage
$rootScope.$on('$routeChangeStart', function(event, next, current) {
if (typeof(current) !== 'undefined'){
//destroy all d3 svg graph
d3.selectAll('svg').remove();
nv.charts = {};
nv.graphs = [];
nv.logs = {};
}
});
});
Когда я удаляю диаграммы из своего приложения, использование памяти всегда возвращается к исходному значению.
С графиком: Whithout:
Есть ли другой способ освобождения памяти, сгенерированной этими диаграммами?
jsfiddle, чтобы продемонстрировать эту проблему.