I'm working on an angularjs application using angularjs-nvd3-directives to render charts.
After a check with Chrome Developer Tools, I detected some memory leaks linked to the charts. When the user navigates through different views containing charts the memory is never fully released.
I'm already doing some cleanup on the graphs controllers:
$scope.$on('$destroy', function() {
d3.select( '#exampleId' ).remove();
d3.select( '#exampleId2' ).remove();
...
});
And on the routeChange event:
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 = {};
}
});
});
When I remove the charts from my app, the memory usage always goes back to the initial value.
With the graph: Whithout:
Is there any other way to release memory generated by those charts ?
jsfiddle to demonstrate the issue.