Javascript 无法从内存中删除已创建但从未附加到页面的画布元素
我正在创建一个画布元素,如下所示:Javascript 无法从内存中删除已创建但从未附加到页面的画布元素,javascript,canvas,Javascript,Canvas,我正在创建一个画布元素,如下所示: var canvas = document.createElement('canvas'); 我使用这个canvas对象来获取上下文,并从中使用上下文中的信息进行进一步的逻辑 var context = canvas.getContext('2d'); ... // More logic 我从未将canvas元素附加到文档或任何其他元素,但使用safari devtools->canvas选项卡,我可以看到每当运行此代码时,都会不断创建canvas元素
var canvas = document.createElement('canvas');
我使用这个canvas
对象来获取上下文,并从中使用上下文中的信息进行进一步的逻辑
var context = canvas.getContext('2d');
...
// More logic
我从未将canvas元素附加到文档或任何其他元素,但使用safari devtools->canvas选项卡,我可以看到每当运行此代码时,都会不断创建canvas元素。它们每个大约200KB,在一个会话中可以创建成百上千个这样的画布元素。如果重新加载页面,它们将从内存中删除,不再显示在画布选项卡中
但是,如果页面没有重新加载,画布也在增加,那么性能就会下降
那么,如果这些画布元素从未附加到页面中,如何从内存中删除它们呢
请参见下面画布选项卡的图片(仅适用于Safari,因为较新版本的Chrome和Firefox不支持它)。第一个画布对象是预期的,其他的我想删除。我正在使用javascript和jquery
问题来自于非常的画布开发工具
它是保持对这些画布元素的引用并阻止垃圾收集器正确工作的罪魁祸首 作为证明,尝试运行以下代码段,首先关闭dev工具,然后在“canvas”选项卡上打开它
var画布,上下文;
对于(设i=0;一旦不再引用IVVariables,就应该对它们进行垃圾收集,您是否检查过是否意外地保留画布的历史记录或全局存储它们?一旦涉及DOM,GC就是一个问题。有几种简单的方法可以通过js DOM交互泄漏内存,我不知道哪些是sti这听起来很像。JS中的垃圾收集是自动的,我们必须看到更多的代码来帮助您调试这个问题。