如何正确销毁Paper.js范围

时间:2016-09-12 18:14:21

标签: javascript ajax memory memory-leaks paperjs

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

为了向您展示我正在尝试做什么,这里是从构造函数中获取的一段代码:

this.paper = new paper.PaperScope;
this.paper.setup(this.canvas);

这就是我试图破坏实例的方式:

this.paper.view.remove();

然后我从DOM中删除canvas。这样做之后,我在控制台上不断收到以下错误:

Cannot read property 'ownerDocument' of null

目前,我提出的唯一解决方案是重用范围和画布而不是销毁它们(使用未使用的实例池而不是不断创建新的实例),因此我没有巨大的内存泄漏。虽然这不是完美的解决方案,因为我无法完全摆脱这些情况。

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

1 个答案:

答案 0 :(得分:1)

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

// 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;