Javascript 如何正确销毁Paper.js范围

Javascript 如何正确销毁Paper.js范围,javascript,ajax,memory,memory-leaks,paperjs,Javascript,Ajax,Memory,Memory Leaks,Paperjs,我通过为每个Paper.js画布创建一个新范围来使用多个Paper.js画布。该站点是用AJAX驱动的,所以我必须在更改子页面时销毁不需要的实例。不幸的是,当我不再需要paper.scope的实例时,我无法调用paper.destroy()方法来清除内存。在我调用view.remove()之后,我的控制台中充满了paper.js core中的错误,因为scope一直试图使用它 为了向您展示我试图做的事情,下面是一段取自构造函数的代码: this.paper = new paper.PaperSc

我通过为每个Paper.js画布创建一个新范围来使用多个Paper.js画布。该站点是用AJAX驱动的,所以我必须在更改子页面时销毁不需要的实例。不幸的是,当我不再需要paper.scope的实例时,我无法调用
paper.destroy()
方法来清除内存。在我调用
view.remove()
之后,我的控制台中充满了paper.js core中的错误,因为scope一直试图使用它

为了向您展示我试图做的事情,下面是一段取自构造函数的代码:

this.paper = new paper.PaperScope;
this.paper.setup(this.canvas);
我就是这样试图破坏这个实例的:

this.paper.view.remove();
然后我从DOM中删除
画布
。完成此操作后,我在console上不断遇到以下错误:

Cannot read property 'ownerDocument' of null
目前,我提出的唯一解决方案是重用作用域和画布,而不是销毁它们(使用未使用的实例池,而不是不断创建新实例),这样我就不会有巨大的内存泄漏。虽然这不是一个完美的解决方案,因为我不能完全摆脱这些情况


所以我的问题是:如何正确地完全销毁paper.js实例以防止内存泄漏?

您必须直接在
PaperScope
实例上调用
remove()

// get a reference to the canvas element
var canvas = document.getElementById('canvas');
// init paper scope
var scope  = new paper.PaperScope;
scope.setup(canvas);

// here do what you want with the canvas

// clear scope
scope.remove();
// remove element
canvas.remove();

// clear variables so they can be garbage collected
canvas = null;
scope  = null;