2

我有一种情况,用户将图像设置为 URL 或转换为 blob 对象 URL 的字节。我的理解是,为了防止资源泄漏,我应该在 blob 对象 URL 更改时释放它们,但我不确定我是否正确检查了旧 URL 的类型。目前,我这样做的方式是检查 url 是否以'blob:'. 这是一个玩具示例函数,它证明它确实似乎有效:

var url;

for (i = 0; i < 5; i++) {
    var oldurl = url;
    console.log('i = ' + i)
    if (i == 0 || i == 2 || i == 3) {
        console.log('Switching to Object URL')
        url = URL.createObjectURL(new Blob(new Uint8Array(0),
                                           {type: 'image/png'}));
    } else {
        console.log('Switching to URL')
        url = 'https://example.com/example-image.png';
    }

    if (oldurl && oldurl.startsWith('blob:')) {
        console.log('Freeing old object url')
        URL.revokeObjectURL(oldurl);
    }
}

这是正确的方法吗?有更好的方法吗?

我会注意到我已经尝试调用不是URL.revokeObjectURL对象 URL的字符串并且它似乎工作正常,所以我也不清楚我正确确定是否需要释放 URL 有多重要。

注意:这是一个 TypeScript 脚本,但我认为这个问题在 Javascript 中同样有效,所以我已经标记了两者。

4

1 回答 1

0

你是对的,我认为目前根本没有其他办法。

于 2017-08-29T14:42:03.063 回答