javascript - 销毁创建的未添加到 DOM 的 HTMLElement
问题描述
目前我正在使用 pixi.js 开发游戏。我实现了实用功能,例如换行或测量最长行的文本长度以在HTMLCanvasElement
. 这是一个示例getLongestWidth
:
static getLongestWidth(lines: string[]): number {
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
const longestLine = lines.reduce((a, b) => a.length > b.length ? a : b, '');
return context.measureText(longestLine).width;
}
我想保持“核心”画布功能独立(context.measureText
在本例中),这样您甚至可以在不提供CanvasRenderingContext2D
每次使用的情况下使用它们。
由于性能是一件事,我想知道是否/如何销毁创建的画布。我猜在函数完成后,至少指向它的引用将被销毁并且没有引用的对象将被垃圾收集?但是 createElement 部分让我失望。我尝试document.removeChild(canvas)
了哪个当然失败了,因为它从未主动添加到 DOM 中,但我不确定后台发生了什么。在文档或谷歌中找不到任何东西,我有点害怕成千上万的孤HTMLCanvasElements
儿在后台漂浮。
如果这是一个超级基本的问题,我很抱歉:) 欢迎提出改进建议。
解决方案
没有办法主动从内存中删除对象。当没有对该对象的引用时,GC 将收集它。
因此,您可以通过设置取消引用该对象,canvas = null;
.
您还可以使用静态类对象来跟踪画布并在完成后将其删除。从技术上讲,这与取消引用相同。参考
class Test {
private static test: any = 'test';
public static testFunc() {
console.log(`deleting: ${Test.test}`);
delete Test.test;
console.log(`done deleting: ${Test.test}`);
}
}
Test.testFunc();
在所有情况下,GC 都会在下一个周期从内存中收集它。
推荐阅读
- python - 使用 GET 将数据发送到烧瓶 Python
- django - 重定向时停止 AWS CloudFront 剥离自定义域
- python - Pandas - 在整个数据框中查找具有特定值的列
- amazon-s3 - 适用于数据事件的 AWS CloudTrail 自定义选择器
- python - 通过 Python 控制纯 GUI 应用程序?
- linux - 使用 CloudFormation 自动创建 linux 用户密码
- node.js - 无法通过使用 docker 上的网络连接到在 docker 容器中运行的 mongodb 其他具有节点 js 的容器
- android - 无法创建 com.example.event.ui.main.EventsViewModel 类的实例
- qualtrics - 为什么在 Qualtrics 嵌入式数据 API 中没有修改记录的日期以进行响应?
- python - 查找两个列表之间的交集