Open przyb opened 8 years ago
I'm running into the same problem. Considering spawning worker threads to handle the drawing to deal with this problem, but that's not ideal.
paper
is a a PaperScope
object. So there actually is PaperScope#remove()
as well as #clear()
. Did you try these?
paper.remove();
I'm having the same problem, I initialize my scope like this:
let scope = new paper.PaperScope; scope.setup(document.getElementById(canvasId));
When my canvas is removed from DOM I clear this scope like this:
scope.remove(); scope.clear(); scope = null;
but for some reason my memory keeps going up each time I create a scope, but doesn't go down when I remove and clear it which results in a crash after some time.
using paper.remove() instead of my code above doesn't work because I'm using specific scopes because I have multiple canvas and I want to be able to clear them individualy. Could it be that cleared scopes are still stored in the main paper object? Is there a way to select and clear scopes by canvas id?
Resolution of a similar issue is on going here #1538.
I am using VueJS and in a v-for loop i have canvases set. Now on each VueJS DOM Update I am trying to destory the previous Scopes and Recreating the new.
But when I use. this.paperScopes[i].remove(); this.paperScopes[i].clear(); this.paperScopes[i] = null;
The code runs but the diagram is still visible.
Also a strange thing happens is that Canvas Size starts to grow each time
this.paperScopes[i] = new paper.PaperScope();
canvases[i] = document.getElementById('canvas_'+i);
this.paperScopes[i].setup(canvases[i]);
this.paperScopes[i].activate();
var myCircle = new this.paperScopes[i].Path.Circle(new this.paperScopes[i].Point(100, 70), 50);
myCircle.fillColor = 'black';
What is the proper way to destroy the the paperScope and recreate another one?
Any help would be truly appreciated. If I would find an answer I will post back. Thanks.
I'm using multiple Paper.js canvases by creating a new scope for each of them. The site is driven with AJAX, so I have to destroy unneeded instances when I change the subpages. Unfortunately, there's no such thing as
paper.destroy()
method that I could call to clear the memory when I no longer need an instance of paper scope. And after I callview.remove()
, my console gets full of errors from paper.js core, as the scope keeps trying to use it anyway.To show you what I'm trying to do, here's a piece of code taken from the constructor:
And that's how I tried to destroy the instance:
And then I remove the
canvas
from DOM. After doing that, I keep getting the following error on console:Currently, the only solution I come up with is to reuse scopes and canvases instead of destroying them (using a pool of unused instances instead of constantly creating new ones), so I don't have a huge memory leak. Although that's not the perfect solution as I can't fully get rid of these instances.
So my question is: how to properly completely destroy paper.js instances to prevent memory leaks?